基于nose、使用django实现的自动化测试执行平台实现Rerun Failed功能。

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//', views.rerun_failed, name='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”只是简单的文本,而不是超链接。

你可能感兴趣的:(Python,Django,软件测试)