zoukankan      html  css  js  c++  java
  • unitest框架--认识与基本使用

    1、import unitest------套路1,必须导入!!
    2、#创建测试类--------------------套路2,测试名自取,最好首字母大写,必须继承unitest下的Testcase类!!!
    class  测试名(unitest.TestCase):
    3、def setup(self):#--------------->钩子方法,所有用例执行前,都会执行这个方法,所以一般存放初始化内容,一般...
    4、def test_01(self):#------------->第一条测试用例,注意!!方法名必须为test开头(如果存在某条用例名不是test开头,那么使用main()执行时,则不会运行到)
    5、def teardown(self):#------------->执行完一条用例后,都会执行这个
    #最后:
    ------------------------->这是最简单的执行测试用例的方法 if __name__=='__main__': unittest.main();#------->运行当前所有的测试用例(以test开头的)

    二、但是每执行一条用例,都会setup(),teardown(),有多少用例,就执行多少次,很明显很浪费时间

     因此!分别把setup(self)、teardown(self)方法改为类方法setupclass(cls)、teardownClass(cls),加上@classmethod修饰,如下面所示

     1 class Test_my_unit(unittest.TestCase):
     2     @classmethod
     3     def setUpClass(cls):
     4         print('START')
     5 
     6     def test_01(self):
     7         print('第一个测试用例');
     8 
     9     def test_02(self):
    10         print('第二个测试用例')
    11 
    12     def test_03(self):
    13         print('第三个测试用例')
    14 
    15     def test_04(self):
    16         print('第四个测试用例');
    17     @classmethod
    18     def tearDownClass(cls):
    19         print('结束');

    结果(满足要求):

     3、用例执行顺序

    根据ASCII码的顺序加载测试用例,数字与字母的顺序为:0-9---->A-Z------>a-z所以以A开头的测试用例方法会优先执行,以a开头会后执行

    那么~如果要指定用例执行顺序的话,就要将命名规范的意思咯

    为什么只执行最后一个用例

    6、使用testsuit指定测试集

    7、通过discover来批量执行用例

        #第一个参数:开始查找的目录:os.getcwd(),说明从当前路径开始找
        #第二个参数:匹配规则:匹配规则为【test*.py】,以名字中含有test的py文件都开始遍历
        #第三个参数:测试模块的顶层目录,没有的话,默认为None
    #使用discover()方法,切记测试用例中需要执行的测试方法必须以test开头,否则无法加载!!!
    discovers=unittest.defaultTestLoader.discover(os.getcwd(),pattern='test*.py',top_level_dir=None); suit.addTest(discovers); #unittest.main(suit); #suit = unittest.TestLoader().loadTestsFromTestCase(Testlianxi2); runner=HTMLTestRunner.HTMLTestRunner( stream=re_open, title=u'测试标题', description=u'测试描述' ) runner.run(suit);

    疑问

    1 如果当前只有一个test类,执行unittest.main();时,就执行test下的所有test开头的用例若一个py文件中,含有多个test类,执行unittest.main();时,则按顺序依次执行两个test类下的所有testcase

     2、如果用例名称不规范时(或者只需要运行指定的用例时),则需要使用suit来指定运行

    8、跳过用例(python3.1以后支持)

    ①、想要无条件跳过用例,只需要在该用例的方法上安上装饰器

    @unittest.skip('跳过没商量')
        def haha_02(self):
            #第一条测试用例,检查对象的字段是否正确
            self.assertEqual('this is test_string',self.test_string);

    ②、判断条件,如果条件为真,那么执行,否则则跳过用例

        @unittest.skipIf(False,'有条件')--------->执行
        def haha_02(self):
            #第一条测试用例,检查对象的字段是否正确
            self.assertEqual('this is test_string',self.test_string);
    
        @unittest.skipIf(True,'有条件')---------->不执行
        def haha_02(self):
            #第一条测试用例,检查对象的字段是否正确
            self.assertEqual('this is test_string',self.test_string);

    例子如下

    lass DemoTest(unittest.TestCase):
        status = 200
        def setUp(self):
            self.url = 'http://www.cnblogs.com/imyalost/'
    
        @unittest.skip(u"无条件跳过该测试")
        def test_blog1(self):
            # 无条件跳过
            r1 = requests.get(self.url)
    
        @unittest.skipIf(status > 200, u"状态码大于200,就跳过该测试")
        def test_blog2(self):
            # 如果断言结果为真,则继续执行,否则跳过测试
            r2 = requests.get(self.url)
            status2 = r2.status_code
            self.assertTrue(status2 > self.status)
    
        @unittest.skipUnless(status == 404, u"状态码为200,则跳过")
        def test_blog3(self):
            # 除非结果为真,否则跳过该测试
            r3 = requests.get(self.url)
            status3 = r3.status_code
            self.assertTrue(status3 > self.status)
    
        @unittest.expectedFailure
        def test_blog4(self):
            # 将测试用例标记为“预期失败”,如果测试执行时失败,则测试结果不计为失败
            r4 = requests.get(self.url+'/test4')
            status4 = r4.status_code
            self.assertTrue(status4 ==self.status)
    
        def tearDown(self):
            pass
    
    if __name__ == '__main__':
        unittest.main()
  • 相关阅读:
    axure rp8.0 序列号,亲测可以用
    纯html页面之间传参
    js下载项目中的文件
    Java获取用户ip
    阿里云部署多个tomcat
    少小有才国家用,老大空长做何为
    获取 web 服务器 port
    知识的迁移和学习能力才是最重要的
    eclipse 安装和使用AmaterasUML
    Eclipse中tomcat更改部署路径 deply path
  • 原文地址:https://www.cnblogs.com/shenyexiaoqingxin/p/10396685.html
Copyright © 2011-2022 走看看