unittest 的用法

一、discover方法

discover方法可以根据标准加载用例,并将结果返回给测试套件(suite),start_dir:待测试的目录,pattern:测试用例文件名的匹配规。

如:

start_dir = ‘./test_case‘suites = unittest.defaultTestLoader.discover(start_dir ,pattern=‘test.*py‘)

当执行多个目录的测试用例时,如何查找test_case下的其他目录吃里的测试用例文件呢?就是在test_case下每个目录里加__init__.py文件,这样会把这个目录当做标记成一个标准的Python模块。

二、测试用例的执行顺序是根据ASCLL码的顺序执行的。如:test_aaa.py优先于test_bbb.py。

三、装饰器 。这些装饰器不仅用在方法上,同样适用于类。四#跳过测试和预期失败

class MyTest(unittest.TestCase):    @unittest.skip(‘直接跳过测试‘)    def test_skip(self):        print(‘test aaa‘)

    @unittest.skipIf(3>2,‘条件为真时跳过装饰的测试‘)    def test_skip_if(self):        print(‘test bbb‘)

    @unittest.skipUnless(3>2,‘条件为真时执行装饰的测试‘)    def test_skip_unless(self):        print(‘test ccc‘)

    @unittest.expectedFailure    def test_expected_failure(self):        self.assertEqual(3,3)

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

四、Fixture 执行一个或者多个测试所需要的环境。如创建临时或者代理 数据库、目录、或者启动服务器进程。
import unittest

def setUpModule():    print(‘test module start >>>>>>>>>>>>>>>>‘)def tearDownModule():    print(‘test module end >>>>>>>>>>>>>>>>>>‘)

class MyTest2(unittest.TestCase):    @classmethod    def setUpClass(cls):        print(‘test class start >>>>>>>>>>>>>>‘)

    @classmethod    def tearDownClass(cls):        print(‘test class end >>>>>>>>>>>>>>>>‘)

    def setUp(self):        print(‘test case start>>>>>>>>>>>>>>‘)

    def tearDown(self):        print(‘test case end>>>>>>>>>>>>>>>‘)

    def test_case1(self):        print(‘test case1‘)

    def test_case2(self):        print("test case2")

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

五、断言方法。
class TestAssert(unittest.TestCase):

    def test_equal(self):        self.assertEqual(2+2,4)        self.assertEqual(‘python‘,‘python‘)        self.assertNotEqual(‘python‘,‘pythno‘)

    def test_in(self):        self.assertIn(‘hello‘,‘hello world‘)        self.assertNotIn(‘hi‘,‘hello‘)

    def test_true(self):        self.assertTrue(1) # or Ture        self.assertFalse(0) # or False
六、数据驱动应用。常用的csv读取数据执行用例,会导致所有数据被当做一条用例来执行,只要有一条用例失败,那么整个用例就执行失败了。一种解决方法是将数据读取到列表中,在用例中按照下标来调用。但是这样有两个问题,一是每次都要读取文件,耗费空间,二是数据在列表中,如果插入一条数据,或者删除一条数据,那么用例在调用数据时就会非常容易出错,不利于维护。
下面介绍2个模块来解决数据驱动问题。Parameterized是Python的一个库。支持unittest、pytest、Nose框架。
import unittestfrom  time import sleepfrom selenium import webdriverfrom parameterized import parameterized

class TestBaidu(unittest.TestCase):    ‘‘‘百度搜索测试‘‘‘    @classmethod    def setUpClass(cls):        cls.driver = webdriver.Chrome()        cls.base_url = ‘https://www.baidu.com‘

    def baidu_search(self,search_key):        self.driver.get(self.base_url)        self.driver.find_element_by_id(‘kw‘).send_keys(search_key)        self.driver.find_element_by_id(‘su‘).click()        sleep(2)

    @parameterized.expand([        (‘case1‘,‘selenium‘),        (‘case2‘, ‘unittest‘),        (‘case3‘, ‘parameterized‘),    ])    def test_search(self,name,search_key):        ‘‘‘‘‘‘        self.baidu_search(search_key)        self.assertEqual(self.driver.title,search_key + ‘_百度搜索‘)

    @classmethod    def tearDownClass(cls):        cls.driver.quit()

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

在@parameterized.expand()中每个元组都是一条测试用例。name对应的是元组中第一列数据,search_key对应的是第二列数据参数化会自动加上0,1,2来区分每条用例。元组中的数据作为用例名的后缀出现在测试报告中DDT是uittest的一个扩展库。测试类需要通过@ddt装饰器进行装饰。DDT提供不同形式的参数化,比如列表,元组,字典等。需要注意字典的KEY与测试方法的参数要保持一致。DDT也支持数据文件(json)的参数化。
import unittestfrom  time import sleepfrom selenium import webdriverfrom ddt import ddt,data,file_data,unpack

@ddtclass TestBaidu(unittest.TestCase):    ‘‘‘百度搜索测试‘‘‘    @classmethod    def setUpClass(cls):        cls.driver = webdriver.Chrome()        cls.base_url = ‘https://www.baidu.com‘

    def baidu_search(self,search_key):        self.driver.get(self.base_url)        self.driver.find_element_by_id(‘kw‘).send_keys(search_key)        self.driver.find_element_by_id(‘su‘).click()        sleep(2)

    @data([‘case1‘,‘selenium‘],[‘case2‘,‘unittest‘],[‘case3‘, ‘parameterized‘])    @unpack    def test_search1(self,name,search_key):        print(‘第一组测试用例:‘, name)        self.baidu_search(search_key)        self.assertEqual(self.driver.title,search_key + ‘_百度搜索‘)

    @data((‘case1‘,‘selenium‘),        (‘case2‘, ‘unittest‘),        (‘case3‘, ‘parameterized‘),)    @unpack    def test_search2(self, name, search_key):        print(‘第二组测试用例:‘,name)        self.baidu_search(search_key)        self.assertEqual(self.driver.title, search_key + ‘_百度搜索‘)

    @data({"search_key":"python"},{"search_key":"ddt"},{"search_key":"Selenium"})    @unpack    def test_search2(self, search_key):        print(‘第三组测试用例:‘,search_key)        self.baidu_search(search_key)        self.assertEqual(self.driver.title, search_key + ‘_百度搜索‘)

    # @file_data(‘ddt_data_file.json‘)    # def test_search4(self, search_key):    #     print(‘第四组测试用例:‘,search_key)    #     self.baidu_search(search_key)    #     self.assertEqual(self.driver.title, search_key + ‘_百度搜索‘)

    @classmethod    def tearDownClass(cls):        cls.driver.quit()

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

ddt_data_file.json
{  "case1":{"search_key":"python"},  "case2":{"search_key":"ddt"},  "case3":{"search_key":"Selenium"}

}

七、HTML测试报告。HTMLTestRunner支持Python3的下载地址:https://github.com/defnngj/HTMLTestRunner
#获取当前的时间now_time = time.strftime(‘%Y-%m-%d %H_%M_%S‘)HTML_report = ‘./test_report/‘+now_time+‘result.html‘fp = open(HTML_report,‘wb‘)runner = HTMLTestRunner(stream=fp,title=‘Fixture‘, description=‘运行环境:Windows 10,Chrome浏览器‘)runner.run(suites)#关闭fp.close()
 


原文地址:https://www.cnblogs.com/wzjbg/p/11617377.html

时间: 2024-07-30 19:19:13

unittest 的用法的相关文章

PyUnit (unittest) 的用法

PyUnit(unittest) 是 Python 自带的单元测试框架,用于编写和运行可重复的测试.PyUnit 是 xUnit 体系的一个成员,xUnit 是众多测试框架的总称,PyUnit 主要用于进行白盒测试和回归测试. 如果你使用的是 2.1 或更早版本的 Python,则可能需要自行下载和安装 PyUnit,现在的开发者通常不需要操心这些事情. 通过 PyUnit 可以让测试具有持久性,测试与开发同步进行,测试代码与开发代码一同发布.使用 PyUnit 具有如下好处: 可以使测试代码与

python unittest框架装饰器

要说单元测试和UI自动化之间的是什么样的一个关系,说说我个人的一些心得体会吧,我并没有太多的这方面经验,由于工作本身就用的少,还有就是功能测试点点对于我这种比较懒惰的人来说,比单元测试复杂...思考单元测试的处理逻辑和UI的对应关系,根据分层自动化的测试思想, UI>>接口>>最底层就是单元,对于单元级别的自动化测试, 是白盒测试范畴, 用一段代码去测试一段代码, 而我们则是需要利用单元测试框架的一些组织驱动单元来编写我们的自动化测试脚本, 而unittest是python自带的单

unittest单元测试,基于java的junit测试框架

import unittestclass study(unittest.TestCase): def testXia(self): self.assertEqual((3*4),20) def testHong(self): self.assertEqual(2,2)if __name__=="__main__": unittest.main() 注意:1.方法的命名以test开头:2.查看unittest的用法,help(unittest);3.查看**的属性,dir(unittes

送给那些有代码基础但仍旧不会学自动化测试的朋友们

百度搜索:小强测试品牌 交流群:165380836 我经常遇到这样的场景:老师,我有python or java基础,但还是不知道怎么写代码?老师,我有代码基础,简单的不用学,我想学高级的.老师,我有编程基础,但是我看不懂代码......诸如此类的问题,我想大家也一定有这些内心的OS 面对这样的场景,这样的问题,我也问了不少童鞋,得到的答案其实听悲哀的.莫过于说些代码太难了,不会不懂:这个代码写的不详细导致我看不懂:我有编程基础的,是你写的代码太烂了.....诸如此类把问题全部归于他因的...可

Web自动化测试05

本篇博客 unittest模块 1 unittest基本概念2 unittest基本用法3 unittest断言4 unittest命令行接口5 unittest与selenium unittest模块 1 unittest基本概念 1) 什么是是unittest框架? Unittest单元测试框架是专门用来进行测试的框架 2) 主要概念: test fixture: 代表了用例执行前的准备工作和用例执行之后的清理工作. test fixture test case: 测试用例,这个相信大家都不

python自动化unittest中yaml用法实例说明

YAML 入门教程:https://www.runoob.com/w3cnote/yaml-intro.html 在编写unittest自动化用例时,一个请求需要编写多条用例,而涉及的参数基本相同,这时候就会用到配置文件,可以把参数配置项统一管理,避免重复代码,也方便后期维护 此处用到的是yaml,首先需要安装yaml库,pip install yaml 安装成功后,脚本导入语句,import yaml,具体语法可参照如上入门教程 举例说明: 用例-查询教师列表信息(请求地址相同,每次请求参数不

Python爬虫利器:Selenium的用法

本文和大家分享的主要是python 爬虫 利器Selenium的相关内容,一起来看看吧,希望对大家 学习python爬虫有所帮助. Selenium  是什么?一句话,自动化测试工具.它支持各种浏览器,包括  Chrome , Safari , Firefox 等主流界面式浏览器,如果你在这些浏览器里面安装一个  Selenium  的插件,那么便可以方便地实现 Web界面的测试.换句话说叫  Selenium  支持这些浏览器驱动.话说回来, PhantomJS 不也是一个浏览器吗,那么  S

python unittest

1.setUp() 和 tearDown() 允许执行每个测试用例前分别初始化和清理测试环境,用法如下: 被测代码 myCode.py: #coding=utf-8 def my_upper(arg): return arg.upper() def my_isupper(arg): return arg.isupper() unittest代码: #coding=utf-8 import unittest import myCode class TestStringMehods(unittest

python unittest 深入failfast及实际应用

failfast是TestResult的一个属性,缺省为False, 作用: 如果failfast为True,一旦测试集中有测试案例failed或发生error立即终止当前整个测试执行,跳过剩下所有测试案例 各种用法:    实现"短路测试",设置failfast为True unittest.main(failfast=True) unittest.TextTestRunner(failfast=True) 设置TestResult控制,eg:unittest.TextResult.f