在UI自动化测试中,有时候经常会提示跑用例失败,在单步或单个用例调试时,用例却成功,这个失败的因素主要有环境、代码或前端定位等原因。
可以看这篇文章《我们是如何让UI测试变得稳定的》中有详细说明,但是,在这里,我们不讨论问题,我们来看看优化
项目中原来的自动化框架是基本nose的,nose中有一个选项为:
--failed Run the tests that failed in the last test run.
可以单独运行上次测试中失败的用例,但貌似与我的想法有点背离,我的需求是失败后再运行一次用例,然后报告可以正常输出
无独有偶,正好看到有一个flaky可以支持这种需求,具体的介绍和安装,有前辈写了:http://blog.csdn.net/liuchunming033/article/details/45916389
但在nose框架中有点差异,如下:
#coding:utf-8 ''' Created on 2016年6月22日 @author: huzq ''' from nose.tools import with_setup import logging from test_case import new from nose.tools import ok_ from nose.tools import eq_ import nose import os from nose.plugins.attrib import attr from nose.plugins.skip import SkipTest import sys from pdb import set_trace #TODO:jfjfjf log = logging.getLogger__name__) @attrmode=1) def test_learn_1): u'''测试取消''' print 'xxx' #raise SkipTest #print "test_lean_1" #pass #assert 1==2 eq_6, 7, msg=u"错误") @attrmode=2) def test_lean_2): u'''测试失败''' try: print "test_learn_2" ok_4==3,msg="xxx") print sys._getframe).f_code.co_name except Exception: print sys._getframe).f_code.co_name @attrmode=2) def test_lean_3): u'''测试成功''' pass def setUp): #set_trace) print "0001 test setUp" def tearDown): print "0001 test teardown"
使用flaky方法如下:
E:workspace osetest_lear est_case>nosetests -v test_case_0001.py --with-flaky #带flaky运行,默认运行一次,最后会输出flaky简要报告 E:workspace osetest_lear est_case>nosetests -v test_case_0001.py --with-flaky --no-flaky-report #没有flaky报告输出 E:workspace osetest_lear est_case>nosetests -v test_case_0001.py --with-flaky --no-flaky-report --max-runs=3 --min-passes=1 #成功后只运行一次,失败后运行2次