基於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/<int:job_id>/', 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”只是簡單的文本,而不是超鏈接。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章