Windautotest是我开发的一个基于Web界面进行操作的测试用例自动化执行平台。Windautotest使用python+django在nose+unittest的基础上开发。相比于直接使用nose,使得测试执行更方便,测试结果更易于管理。
需求:
点击job的Rerun Failed按钮,生成一个新的job,运行当前job的失败用例。对于Rerun Failed生成的job,仍然可以执行Rerun Failed操作。
思考:
nosetests --with-id运行时可以生成.noseids文件,之后使用nosetests --failed,则只执行上一次运行失败的用例。
使用--with-id每次执行时都会生成id文件会覆盖之前的id文件。
可以指定id文件的名字,这样就可以每次都生成一个不同的id文件。Rerun Failed时,不指定案例目录,而是指定id文件。例如:>nosetests --failed --id-file=bgp.noseids。为了生成新的noseids文件了。可以>nosetests --failed --id-file=bgp.noseids --with-id,这种方式会从bgp.noseids提取出失败的用例进行执行,并且将本轮执行失败的用例信息写入bgp.noseids。但是原来的bgp.noseids被覆盖。这会导致执行过一次Rerun Failed的job,其Rerun Failed功能不正常。
设计:
每次执行任务时,将id信息写入job_id.noseids文件。
View函数rerun_failed()将test_dierectory设置为.noseids的完整路径。将原job的job_id.noseids复制为new_job_id.noseids。比如原job的id是1000,新job的id是1001,然后执行>nosetests --failed --id-file=1001.noseids --with-id --with-html --html-file=report_filename> log_file_name。
周边配套实现:
models.py中模型Job中添加noseids字段,存储noseids文件的路径。noseids = models.CharField(max_length=4096,default=None,null=True)。Linux最大路径长度是4096字节。
urls.py中urlpatterns中添加path('rerun_failed/
Job_list.html添加Rerun Failed按钮。
新的job的name为rerun failed of job id号,名字不用再修改,所以不再弹出add_job页面。
测试:
首先将add_job()和_run_job()进行修改,添加--with-id选项。功能正常。
实现rerun_failed()和_rerun_failed()。
Rerun Failed功能正常。而且Rerun Failed的job再次Rerun Failed,功能也正常。
缺陷:还没有执行完的job,Rerun Failed会生成无法执行的job。
解决办法:模板Job_list.html中,添加逻辑,如果状态不是COMPLETE,则“Rerun Failed”只是文本,而不是超链接。
类似的,report按钮也做这样的优化。
局限:不能对rerun failed的用例进行rerun。其实是可以实现的,但是我觉得没有必要rerun这种job,我们只关心失败的用例。
UI优化:让rerun不能被点击,为此models中添加rerun_failed标记。添加rerun failed的job时,将标记置位。Job_list.html中,添加逻辑,如果rerun_failed标志置位,则“rerun”只是简单的文本,而不是超链接。