怀化市本地信息网

VBS定时执行idea程序的Testng文件的方法

2026-03-30 10:30:02 浏览次数:2
详细信息

方法一:直接使用VBS调度(推荐)

1. 创建执行TestNG的VBS脚本

' run_testng.vbs
Set WshShell = CreateObject("WScript.Shell")

' 设置Java和TestNG相关路径
javaPath = "C:\Program Files\Java\jdk-11\bin\java.exe"
projectPath = "D:\YourProject"
testngXml = "testng.xml"

' 构建执行命令
cmd = chr(34) & javaPath & chr(34) & _
      " -cp """ & projectPath & "\target\test-classes;" & _
                 projectPath & "\target\classes;" & _
                 projectPath & "\lib\*""" & _
      " org.testng.TestNG " & _
      " -testclass """ & projectPath & "\" & testngXml & """"

' 执行命令
WshShell.Run cmd, 1, True

' 记录日志
Set fso = CreateObject("Scripting.FileSystemObject")
Set logFile = fso.OpenTextFile("D:\logs\testng_execution.log", 8, True)
logFile.WriteLine Now() & " - TestNG执行完成"
logFile.Close

2. 创建定时调度的VBS脚本

' schedule_testng.vbs
Set WshShell = CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")

' 脚本路径
vbsPath = "D:\scripts\run_testng.vbs"

' 使用Windows任务计划程序创建定时任务
taskName = "RunTestNGDaily"
scheduleCmd = "schtasks /create /tn """ & taskName & """ /tr """ & vbsPath & """ /sc daily /st 09:00"

' 执行创建任务
WshShell.Run scheduleCmd, 0, True

MsgBox "定时任务已创建,每天9:00执行TestNG测试"

方法二:使用Windows任务计划程序 + VBS

1. 创建批处理文件

@echo off
REM run_testng.bat
set JAVA_HOME=C:\Program Files\Java\jdk-11
set PROJECT_PATH=D:\YourProject

cd %PROJECT_PATH%
%JAVA_HOME%\bin\java -cp "target\test-classes;target\classes;lib\*" org.testng.TestNG -testclass testng.xml

echo %date% %time% TestNG执行完成 >> D:\logs\testng.log

2. 创建VBS来设置定时任务

' create_scheduled_task.vbs
Set service = CreateObject("Schedule.Service")
Call service.Connect()

' 创建任务
Set rootFolder = service.GetFolder("\")
Set taskDefinition = service.NewTask(0)

' 设置触发器(每天上午10点)
Set trigger = taskDefinition.Triggers.Create(2) ' 2 = 每天
trigger.StartBoundary = DateAdd("d", 1, Date) & "T10:00:00"
trigger.Enabled = True

' 设置执行动作
Set action = taskDefinition.Actions.Create(0) ' 0 = 执行程序
action.Path = "cmd.exe"
action.Arguments = "/c D:\scripts\run_testng.bat"

' 设置任务信息
taskDefinition.RegistrationInfo.Description = "定时执行TestNG测试"
taskDefinition.Settings.Enabled = True
taskDefinition.Settings.Hidden = False

' 注册任务
rootFolder.RegisterTaskDefinition("TestNG Daily Run", taskDefinition, 6, , , 3)

MsgBox "定时任务创建成功!"

方法三:简单的循环等待方式(适合短期测试)

' simple_scheduler.vbs
Set WshShell = CreateObject("WScript.Shell")

' 每24小时执行一次
Do While True
    ' 执行TestNG
    WshShell.Run "java -cp ""target\test-classes;target\classes;lib\*"" org.testng.TestNG testng.xml", 1, True

    ' 记录执行时间
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set log = fso.OpenTextFile("execution.log", 8, True)
    log.WriteLine "TestNG执行时间: " & Now()
    log.Close

    ' 等待24小时(86400000毫秒)
    WScript.Sleep(86400000)
Loop

方法四:使用XML配置的完整方案

1. 创建配置文件 config.xml

<!-- config.xml -->
<configuration>
    <java>C:\Program Files\Java\jdk-11\bin\java.exe</java>
    <project>D:\YourIdeaProject</project>
    <testng>testng.xml</testng>
    <schedule>
        <time>14:30</time>
        <interval>daily</interval>
    </schedule>
</configuration>

2. 创建主调度VBS脚本

' main_scheduler.vbs
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
xmlDoc.async = False
xmlDoc.load("config.xml")

' 读取配置
javaPath = xmlDoc.selectSingleNode("//java").text
projectPath = xmlDoc.selectSingleNode("//project").text
testngFile = xmlDoc.selectSingleNode("//testng").text
scheduleTime = xmlDoc.selectSingleNode("//schedule/time").text

' 创建执行函数
Sub RunTestNG()
    Set WshShell = CreateObject("WScript.Shell")

    cmd = chr(34) & javaPath & chr(34) & _
          " -cp """ & projectPath & "\target\test-classes;" & _
                     projectPath & "\target\classes;" & _
                     projectPath & "\lib\*""" & _
          " org.testng.TestNG " & _
          " """ & projectPath & "\" & testngFile & """"

    WshShell.Run cmd, 1, True
End Sub

' 定时调度逻辑
If Hour(Now()) = CInt(Left(scheduleTime, 2)) And _
   Minute(Now()) = CInt(Mid(scheduleTime, 4, 2)) Then

    RunTestNG()

    ' 发送邮件通知(可选)
    SendEmailNotification "TestNG测试执行完成"
End If

推荐的最佳实践

1. 使用Windows任务计划程序(最稳定)

' 推荐:使用schtasks命令创建定时任务
Set WshShell = CreateObject("WScript.Shell")
cmd = "schtasks /create /tn ""TestNG_Automation"" " & _
      "/tr ""D:\scripts\run_testng.bat"" " & _
      "/sc daily /st 09:00 /ru System"

WshShell.Run cmd, 0, True

2. 带错误处理的完整脚本

On Error Resume Next

Set fso = CreateObject("Scripting.FileSystemObject")
Set WshShell = CreateObject("WScript.Shell")

' 错误处理函数
Function RunTestWithRetry(maxRetries)
    For retry = 1 To maxRetries
        On Error Resume Next
        result = WshShell.Run("java -cp ...", 1, True)

        If Err.Number = 0 Then
            LogMessage "执行成功,尝试次数: " & retry
            Exit Function
        Else
            LogMessage "第" & retry & "次尝试失败: " & Err.Description
            WScript.Sleep(5000) ' 等待5秒后重试
        End If
    Next
    LogMessage "执行失败,达到最大重试次数"
End Function

3. 集成到Jenkins/CI工具

如果已有CI环境,建议直接使用:

注意事项

环境变量:确保Java和项目路径正确 权限问题:以管理员身份运行VBS脚本 日志记录:重要操作都要记录日志 异常处理:添加适当的错误处理机制 资源清理:测试完成后清理临时文件

最简单的实现方式:使用Windows任务计划程序调用批处理文件,这是最稳定可靠的方法。

相关推荐