使用xxl-job运行TestNG测试方法
0.引言
对于Spring Boot框架想必大家在开发人员的口中经常听到,在各种微信公众号号上想必也能经常看见,但在自动化框架中,我想大多数测试人员应该用不上。包括我在内,我一直认为自动化测试框架使用TestNG就足够了,不需要再额外增加一个新的框架来增加脚本的开发难度。但由于我们要使用xxl-job与apollo,导致我们必须使用Spring boot框架进行配置,这就使得我在使用TestNG编写自动化测试脚本时,必须将测试框架整合到Spring boot框架中,否则无法使用xxl-job与apollo的功能。
我想,很多人都会觉得:“我完全不知道Spring Boot框架是什么,单单学会使用单元测试框架就已经很费事了,如今还要再加上个更深的开发框架,可能我是无法使用xxl-job与apollo了”。有这样的想法很正常,我也是这样,虽然我引入了Spring Boot框架,但对于该框架,可以说我是一点都不了解,只是偶尔看过一星半点的介绍,但这并不妨碍我的使用,俗话说得好:“只要思想不滑坡,办法总比困难多”。而且对于框架,我们也只是因为xxl-job与apollo工具是依赖于该框架而已,所以我们只需要知道几个简单注解和复制粘贴相同的代码即可,至于原理什么的,我们都无需深入了解,所以我们不必担心不会使用。下面我就和大家分享下我实践的经验。
1.由xxl-job的官方例子入手
要想使用xxl-job来调用TestNG,就必须要明白怎么运行Spring Boot框架。因为xxl-job是通过Spring Boot框架来完成运行的,所以首先我们需要简单了解Spring Boot 框架的运作,只有了解了其中的运行方式,才能将框架融合到现有的测试框架中。下面我将通过xxl-job官方给出的一个例子进行说明。
我们拉取了xxl-job的代码后,其项目中,存在这样的一个路径
xxl-job\xxl-job-executor-samples\xxl-job-executor-sample-springboot
该项目便是官方给出的一个使用Spring Boot框架用xxl-job的例子。我们将该演示项目导入到IDE中,展开项目后,我们可以看到如下图的结构:
简单介绍一下:
- XxlJobExecutorApplication是服务的启动类,里面有一个main方法,当我们要启动Spring Boot服务时,直接运行该类即可,无需对该类进行改动
- XxlJobConfig是xxl-job的启动配置类,里面包含xxl-job调用当前服务的配置(应该是这么解释吧···),无需对该类进行改动,但需要注意,高版本(2.3.0)与低版本(2.1.2)中存在以下方法不兼容的情况,在使用时,需要注意修改(一般不需要改动,按照自己xxl-job版本来写即可)
- IndexController全是注释的代码,不用管,也不需要修改
- SampleXxlJob是用来编写xxl-job调用的定时任务入口方法的类,当然你也可以不用这个类名,只要包含@XxlJob这个注解即可,该类需要根据调用需求进行修改
- application.properties配置文件,其中包含了引入xxl-job的基本参数,需要根据调用需求进行更改
- logback.xml日志配置文件,暂时不用修改
以上是对于演示案例项目的结构的简单说明,下面我将从配置文件开始,讲讲我对框架的理解,直到能在xxl-job中正常调用到我们编写的方法为止。
1.1 配置文件
打开application.properties文件,我们可以看到有一堆的参数,别担心,上面几个参数是我们要修改的。
- server.port:Spring Boot框架的启动端口,理论上,只要端口不冲突(没有其他的服务占用端口等)就不用修改,或者改一个符合端口号的随机数字(不建议这么玩),这样一般情况下是不会冲突的
- logging.config:日志配置文件的存放地址,如果你是与application.properties文件放在同一路径下,那便无需更改
- xxl.job.admin.addresses:xxl-job的启动路径,如果你的xxl-job在本地,并且没有改过xxl-job服务的启动端口,那也无需更改(由于我本地还启动了apollo,所以我更改过xxl-job的启动端口,我在《环境搭建》一文中有提及到)
- xxl.job.executor.appname:执行器名称,该参数是在xxl-job后台系统中,添加的执行器名称,这里需要与后台配置的名称一致(好像不一致也能调用成功),执行器命名为demo,这里边需要相应改为demo
### xxl-job executor appname
xxl.job.executor.appname=demo
- xxl.job.executor.port:xxl-job执行器调用端口,该端口是xxl-job与服务的连接通道,需要与服务的启动端口进行区分。在添加执行器时,使用的是该端口号
xxl.job.executor.port=9999
- xxl.job.executor.logpath:执行日志生成路径,如果只是用来简单调用,也可不必更改
以上便是可能需要更改的配置,对于其他的配置,几乎无需更改。不难看出,xxl-job官方对我们这样的小白还是挺友好的,配置文件的内容都帮我们配置地很清晰,如果只是为了成功使用xxl-job调用到我们启动的服务,那配置文件压根就不用修改。
1.2 编写定时任务
在章节开头,我提到了“SampleXxlJob”类是存放定时任务执行方法的类,打开该类,我们可以看到,xxl-job官方为我们编写了很多的例子,我们只要拿第一个例子进行分析即可:
@Component
public class SampleXxlJob {
/**
* 1、简单任务示例(Bean模式)
*/
@XxlJob("demoJobHandler")
public void demoJobHandler() throws Exception {
XxlJobHelper.log("XXL-JOB, Hello World.");
for (int i = 0; i < 5; i++) {
XxlJobHelper.log("beat at:" + i);
TimeUnit.SECONDS.sleep(2);
}
// default success
}
}
根据上例子,我们可以知道,要想让xxl-job执行时调用到相应的方法,首先类名前必须加上@Component注解,该注解是Spring Boot框架中的一个注解,你无需知道有什么用;其次,在任务方法上,加上@XxlJob注解,注解需要指定一个值,该值便是在配置定时任务时写入的JobHandler内容,该值必须与配置的值一致,否则将无法被调用到。例如,在案例中,我们在代码写入的值为“demoJobHandler”,那么,我们在后台配置的定时任务上,其JobHandler也必须是“demoJobHandler”:
当然,类名与方法名可随意命名,因为定时任务的调用与类、方法名称无关,只与相应的注解有关,注解配置正确,那运行便没有问题。不过有一点需要注意,在代码中
XxlJobHelper.log("XXL-JOB, Hello World.");
是高版本中配置日志的方法,低版本中只能使用Logger类进行配置。对于日志,其实我并不是很了解,有兴趣的朋友可以自行搜索学习,这里便不进行说明。
1.3 启动服务
同样在章节开头,我提到了“XxlJobExecutorApplication”类是服务的启动类,我们可以看到,在该类中,