自动化测试程序

最近开始用groovy写一个自动化测试,还算比较通用,有命令行ui 

还有待完善

测试运行-命令行

 

cd到项目根目录下即 autotest.groovy所在目录执行命令

目前所有的命令集如下:

test_all                           测试所有脚本

test_package 包名                 测试script目录下的指定目录下的脚本

:test_package  script.abc

test_script 包名.脚本名             测试script目录下的指定文件脚本

例:test_script  script.abc.TestClass

test_function 包名.脚本名.方法名    测试指定脚本的指定测试功能(方法)

例:test_function  script.abc.TestClass.methodA

generate_script 包名.脚本名                 创建测试脚本

例:generate_script. abc.TestClass

 

如果 命令后加 -i 则会进入交互模式 test_package -i abc

在交互模式下如果 出现程序异常或断言错误可以选择是否继续进行下面的测试

 

最后日志存放在www/log

 

 

 

测试运行-图形界面

cd到项目根目录 执行testui.groovy

打开浏览器 http://localhost:8088/test/

 

如上图

4个区域

top区域:点击<!--[if gte vml 1]><v:shape id="图片_x0020_10" o:spid="_x0000_i1026" type="#_x0000_t75" style='width:22.5pt;height:10.5pt;visibility:visible; mso-wrap-style:square'> <v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image003.png" o:title="" /> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->可以切换皮肤风格,点击测试全部可以对所有的测试脚本进行测试,点击历史日志可以查看所有www/log下的历史日志文件,点击清空控制台会将控制台中所有选项卡的信息清除

 

/脚本区:显示的是script下存放的包和脚本,右击菜单选择run可以执行包下测试脚本或单个测试脚本

 

方法区:点击包/脚本区的测试脚本时,如果测试脚本下有测试方法那么可以右击菜单选择run直接运行指定的测试方法

 

控制台:

在执行测试后的日志展示区域,日志存放在www/log,点击<!--[if gte vml 1]><v:shape id="图片_x0020_13" o:spid="_x0000_i1025" type="#_x0000_t75" style='width:15pt; height:7.5pt;visibility:visible;mso-wrap-style:square'> <v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image005.png" o:title="" /> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->可以开启或暂停对当前选项卡的测试日志的监控

 

测试脚本编写

测试脚本需要使用groovy脚本语言编写

脚本必须放在根目录下script包下,script下最多支持1级目录

测试脚本必须继承testbase.TestBase

需要进行测试方法必须在方法上使用@TestCase 标注

例:@TestCase(function='将符合标准的职位对象持久化',timelimit=12l)

TestCase表示此方法需要测试,function内容说明该测试方法测的业务规则(可选),timelimit为方法允许的最大耗时上限(可选)为12ms

 

以下是两个完整的测试方法例子(查询及添加):

  //职位view模拟

  static Appointment newAppointment(){

        def appointment = new Appointment()

        appointment.setAppointmentDesc("测试描述")

        appointment.setAppointmentResourceMstrId(new BigDecimal(112))

        //appointment.setAppointmentType('测试类型')

        appointment.setAppointmentStatus('测试状态')

        appointment.setAppointmentBeginDateTime(new                                  Timestamp(System.currentTimeMillis()))

        appointment.setAppointmentEndDateTime(new Timestamp(System.currentTimeMillis()          + 100000))

        appointment.setCreatedBy(0)

 

        return   appointment

    }

 

    @TestCase(function='查找到正确的职位集合',timelimit=12l)

    void searchAppointmentList() {

        //session 设置

        initSession(0)

 

        //view设置

        def searchView0 = new AppointmentSearchView()

        searchView0.setAppointmentResourceMstrId(new BigDecimal(573));

        //测试逻辑

        AppointmentCommonService service = RemoteProxyFactory.getService(AppointmentCommonService.class)

        List<AppointmentInfoView> rs = service.searchAppointmentList(searchView0)

        //println rs['cscsc']

 

        //测试验证

        assert rs.isEmpty() == false

 

    }

 

 

    @TestCase(function='将符合标准的职位对象持久化',timelimit=12l)

    void createAppointment() {

        //会话设定

        initSession('ktadmin')

        //模拟对象验证

        def appointment = newAppointment()

        assert  appointment.getAppointmentType() != null,'职位类型必须填写'

        assert  appointment.getAppointmentStatus() != null,'职位状态必须填写'

 

 

        //测试逻辑

        AppointmentCommonService service =                              RemoteProxyFactory.getService(AppointmentCommonService.class)

        Appointment rs = service.createAppointment(appointment)

        println rs.appointmentId

 

 

        assert rs != null

    }

 

session有多种方式可以设置

1) initSession (20, null, null, null, null, null, null, null, null, null, null, null) 新设置一个session

2) initSession ('ktadmin') 获取一个当前的session 可在testbase.Sessions中添加

3)initSession(int userId)

4)initSession(int userId,int roleId )

5)initSession(int userId,int roleId,int localId)

...

 

服务端的方法通过 RemoteProxyFactory.getService(AppointmentCommonService.class) 方式构造

 

 

 

猜你喜欢

转载自csc365kl.iteye.com/blog/1344573