zoukankan      html  css  js  c++  java
  • selenium 笔记 unittest

    1 python 里面单元测试框架:unittest /pytest 

    2 查看源码解析:

    import unittest
    print(help(unittest))

    3 测试类中测试方法的名称要以test开头

    unittest.main()是运行主函数,运行一会看到测试结果

    断言就是拿实际结果和期望结果去对比。

    前置条件:setUp: 在写测试用例 的时候,每次操作其实都是基于打开浏览器输入对应网址这些操作,这个就是执行用例的前置条件

    后置条件:tearDown:执行完用例后,为了不影响下一次用例的执行,一般有个数据还原的过程,这就是执行用例的后置条件。

    前置、后置条件,如果没有也可以写pass

     4 unittest执行顺序:

      先执行前置setUp,然后执行用例 test*,最后执行后置tearDown

      测试用例test* 的执行顺序是根据用例名称顺序执行

      只执行test开头的用例

    5 批量执行

     discover 方法里有三个参数:

    -case_dir:这个是待执行用例的目录

    -pattern:这个是匹配脚本名称的规则,test*.py意思是匹配test开头的所有脚本

    -top_level_dir:这个是顶层目录的名称,一般默认等于 None就行了。

    .discover加载到的用例是一个list集合,使用unittest 里面的TextTestRunner的run方法执行

    #coding:utf-8
    import unittest

    def all_case():
    #待执行用例的目录
    case_dir="D:\test\TestProject\Case"
    testcases=unittest.TestSuite()
    discover=unittest.defaultTestLoader.discover(case_dir,pattern='test*.py',top_level_dir=None)
    #discover方法筛选出来的用例,循环添加到测试套件中
    print(discover)
    for test_suite in discover:# test_suite 同一个包中所有文件中的测试用例
    for test_case in test_suite:# test_case 同一个文件中的所有测试用例
    testcases.addTests(test_case)
    print(testcases)
    return testcases

    if __name__=="__main__":
    #返回实例
    runner=unittest.TextTestRunner()
    #run所有用例
    runner.run(all_case())

    生成html测试报告:

    需要导入第三方模块:HTMLTestRunner

    下载:http://tungwaiyip.info/software/HTMLTestRunner.html  下载:HTMLTestRunner.py文件 

    下载后手动放于python安装文件的lib目录下

    三个参数:

    --stream:测试报告写入文件的存储区域

    --title:测试报告的主题

    --description:测试报告的描述

    可以在case中添加注释 ,u''' XXXXX''' ,在报告中可以显示这些注释

    #coding:utf-8
    import unittest
    import HTMLTestRunner

    def all_case():
    #待执行用例的目录
    case_dir="D:\test\TestProject\Case"
    testcases=unittest.TestSuite()
    discover=unittest.defaultTestLoader.discover(case_dir,pattern='test*.py',top_level_dir=None)
    #discover方法筛选出来的用例,循环添加到测试套件中
    print(discover)
    for test_suite in discover:# test_suite 同一个包中所有文件中的测试用例
    for test_case in test_suite:# test_case 同一个文件中的所有测试用例
    testcases.addTests(test_case)
    print(testcases)
    return testcases

    if __name__=="__main__":
    #返回实例
    #runner=unittest.TextTestRunner()
    report_path="D:\test\report.html"
    fp=open(report_path,"wb")
    runner=HTMLTestRunner.HTMLTestRunner(stream=fp,
    title=u'这是我的自动化测试报告',
    description=u'用例执行情况')
    #run所有用例
    runner.run(all_case())

    fp.close()

    装饰器

    setUp():每个测试case运行前运行

    tearDown():每个测试case运行完后执行

    setUpClass():必须 使用@classmethod装饰器,所有case运行前只运行一次

    tearDownClass():必须使用@classmethod装饰器,所有case运行完后只运行一次

    @是修饰符,classmethod是python里的类方法 

    #coding:utf-8
    import unittest
    import time

    class Test(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
    print("start")

    @classmethod
    def tearDownClass(cls):
    time.sleep(1)
    print("end")

    def test01(self):
    print(u"执行测试用例01")

    def test03(self):
    print("执行测试用例03")

    def test02(self):
    print("执行测试用例02")

    def addtest(self):
    print("add方法")

    if __name__=="__main__":
    unittest.main()

    断言:

    #coding:utf-8
    import unittest
    class Test(unittest.TestCase):
    def test01(self):
    '''判断a==b'''
    a=1
    b=1
    self.assertEqual(a,b)
    def test02(self):
    '''判断 a in b'''
    a='hello'
    b='hello world!'
    self.assertIn(a,b)

    def test03(self):
    '''check a is true'''
    a=True
    self.assertTrue(a)

    def test04(self):
    '''失败'''
    a='test'
    b="jerry"
    self.assertEqual(a,b)

    if __name__=="__main__":
    unittest.main()

    常用断言:

    1 .assertEqual(self,first,second,msg=None)  --判断两个参数相等:first==second

    2 .assertNotEqual(self,first,second,msg=None) --判断两个参数不相等:first!=second

    3 .assertIn(self,member,containe,msg=None)  --判断字符串是否包含:member in container

    4 .assetNotIn(self,member,container,msg=None)  --判断字符串是否不包含:member not in container

    5 .assertTrue(self,expr,msg=None)  --判断是否为真:expr is True

    6 .assertFalse(self,expr,msg=None) --判断是否为假:expr is False

    7 .assertIsNone(self,obj,msg=None)  --判断是否为None:obj is None

    8 .assertIsNotNone(self,obj,msg=None)  --判断是否不为None:obj is not None

  • 相关阅读:
    在 Flink 算子中使用多线程如何保证不丢数据?
    日处理数据量超10亿:友信金服基于Flink构建实时用户画像系统的实践
    Java编码技巧之高效代码50例
    codeforces 1284D. New Year and Conference(线段树)
    codeforces 1284C. New Year and Permutation(组合数学)
    codeforces 1284B. New Year and Ascent Sequence(二分)
    Codeforces Hello2020 A-E简要题解
    POJ2456 Aggressive cows(二分)
    POJ3122 Pie(二分)
    POJ3258 River Hopscotch(二分最大化最小值)
  • 原文地址:https://www.cnblogs.com/caojuansh/p/13304751.html
Copyright © 2011-2022 走看看