unittest模块常用属性

1、 unittest.TestCase类:所有的测试用例类继承的基类

定义一个测试用例类,需要继承TestCase,比如:

class BaiduTest(unittest.TestCase):

2、 unittest.main():使用这个可以方便的将一个测试模块变为可直接运行的测试脚本,main()方法使用TestLoader类来搜索所有包含在该模块中以test命名开头的测试方法,并自动执行它们。执行方法的默认顺序是:根据ASCII码的顺序加载测试用例,数字与字母的顺序为:0-9,A-Z,a-z。

3、 unittest.TestSuite():用来创建测试套件

4、 unittest.TextTestRunner():通过该类的run()方法可运行suite组装的测试用例。

5、 unittest.defaultTestLoader():通过该类下的discover()方法可以自动根据测试目录匹配查找到的测试用例文件,并将查找到的测试用例组装到测试套件,因此可以直接通过run()方法执行discover。例如:

discover = unittest.defaultTestLoader.discover(test_dir, pattern=’test_*.py’)

第一个参数是测试用例目录,第二个参数是查找以test_开头的py文件

6、 unittest.skip():装饰器,当运行用例时,有些用例可能不想执行等,可以用装饰器暂时屏蔽该条测试用例。一种常见的用法就是比如说想调试某一个测试用例,想先屏蔽其他用例,就可以用装饰器屏蔽。

a) @unittest.skip(reason):skip(reason)这个装饰器是无条件跳过装饰器所装饰的case,并说明跳过测试的原因

b) @unittest.skipIf(reason):skipIf(condition, reason):条件为真时,跳过装饰的case,并说明跳过原因。

c) @unittest.skipUnless(reason):skipUnless(condition, reason):条件为假时,跳过装饰的测试,并说明跳过测试的原因

d) @unittest.expecteFailure():expecteFailure():测试标记为失败

TestCase类常用属性

  1. setUp():setUp()方法是用于测试用例执行前的初始化工作。如测试用例需要访问数据库,可以在setUp()中建立数据库连接并初始化,需要登录web,可以先实例化浏览器等。
  2. tearDown():用于测试用例执行之后的善后工作,比如关闭数据库连接,关闭浏览器等。
  3. assertEqual(a, b, [msg=测试失败时打印的信息]):断言a,b两个值是否相等,相等则测试通过。
  4. assertNotEqual(a, b, [msg=测试失败时打印的信息]):断言a,b两个值是否相等,不相等则测试通过.
  5. assertTrue(x, [msg]):断言x是否True,true则测试通过
  6. assertFalse(x, [msg]):断言x是否False,False则测试通过
  7. assertIs(a, b, [msg]):断言a是否是b,是则测试通过
  8. assertNotIs(a, b, [msg]):断言a是否是b,不是则测试通过
  9. assertIsNone(x, [msg]):断言x是否是None,是None则测试通过
  10. assertIsNotNone(x, [msg]):断言x是否是None,是None则测试通过
  11. assertIn(a, b, [msg]):断言a是否在b中,是则测试通过
  12. assertNotIn(a, b, [msg]):断言a是否在b中,不在则测试通过
  13. assertIsInstance(a, b, [msg]):断言a是否是b的一个实例,是则测试通过
  14. assertNotIsInstance(a, b, [msg]):断言a是否是b的一个实例,不是则测试通过

举例:

class TestSub(unittest.TestCase):

    def setUp(self):
"""为测试方法初始化,每个case运行前执行一次"""
self.a = 20
self.b = 10 def tearDown(self):
"""清理函数,每个case执行后执行一次"""
pass def test_sub(self):
"""验证减法"""
result = self.a - self.b
self.assertEqual(result, 10) def test_add(self):
"""验证加法"""
result = self.a + self.b
self.assertEqual(result, 30)

TestSuite类常用属性

addTest():将测试用例添加到测试套件中,比如:

#将test_baidu模块下的BaiduTest类下的test_baidu_serach和test_baidu_login测试用例添加到套件

suite = unittest.TestSuite()

suite.addTest(TestSub ("test_sub"))

suite.addTest(TestSub ("test_add "))

runner = unittest.TextTestRunner()

runner.run(suite)

TextTestRunner类常用属性

run()方法是运行测试套件中的测试用例,参数是一个测试套件,例如:

runner = unittest.TextTestRunner()

runner.run(suite)

if __name__ == '__main__':
    # 可以直接调用main方法执行测试用例
    # unittest.main()

# 也可以像下面这样先创建测试套件,然后将测试用例放入套件,再使用run方法运行套件
    test_dir = './'
    discover = unittest.defaultTestLoader.discover(test_dir, pattern='test_*.py')
    runner = unittest.TextTestRunner()
    runner.run(discover)

综合实例

实例1:

# coding=utf-8

"""
create on 2019.12.26
@author:suyang
Project:使用unittest编写测试用例
"""
import unittest # 定义测试类,继承TestCase的所有方法
class Test(unittest.TestCase):
# 重写父类的setUp方法10 def setUp(self):
self.number = input("Enter a number:")
self.number = int(self.number) # 定义第一个测试用例
def test_case1(self):
print(self.number)
self.assertEqual(self.number, 10, "Your input is not 10") # 定义第二个测试用例
@unittest.skip("暂时跳过用例2的测试")
def test_case2(self):
print(self.number)
self.assertEqual(self.number, 20, "Your input is not 20") def test_case3(self):
result = self.number + 10
self.assertEqual(result, 30, "Your input is not 20") def tearDown(self):
print('test over') # 3种方法都可以执行测试用例
if __name__ == '__main__':
# 可以直接调用main方法执行测试用例
# unittest.main() # 先创建一个测试套件,然后将用例依次用addTest方法加入测试套件中,再用run方法执行用例
# suit = unittest.TestSuite()
# suit.addTest(Test('test_case1'))
# suit.addTest(Test('test_case2'))
# suit.addTest(Test('test_case3'))
# runner = unittest.TextTestRunner()
# runner.run(suit) # 也可以像下面这样先创建测试套件,然后将测试用例放入套件,再使用run方法运行套件
test_dir = './'
discover = unittest.defaultTestLoader.discover(test_dir, pattern='test_*.py')
runner = unittest.TextTestRunner()
runner.run(discover)

实例2:

# coding=utf-8
"""
created on 2019.12.26
@author:suyang
Project:测试百度搜索
"""
from selenium import webdriver
import unittest
import time class BaiduTest(unittest.TestCase):
def setUp(self):
# pass
self.driver = webdriver.Chrome()
# 隐性等待时间为30秒
self.driver.implicitly_wait(30)
self.base_url = "https://www.baidu.com" def test_baidu(self):
driver = self.driver
driver.get(self.base_url+'/')
driver.find_element_by_id("kw").clear()
driver.find_element_by_id("kw").send_keys("unittest")
driver.find_element_by_id("su").click()
time.sleep(3)
title = driver.title
self.assertEqual(title, u"unittest_百度搜索") def tearDown(self):
self.driver.quit() if __name__ == '__main__':
unittest.main()

unittest模块使用方法的更多相关文章

  1. unittest模块小结

    这次写的是unittest模块的测试用例,属于自动化的门槛,进去了基本算自动化入了门,测试内容很简单,模拟给url推送用户名.密码测试登录功能 先上代码: #login_test.py import ...

  2. python的单元测试unittest模块

    首先需要导入unittest模块 import unittest import  HTMLTestRunner # TestCase 也就是测试用例## TestSuite 多个测试用例集合在一起,就 ...

  3. 第二章 使用unittest模块扩展功能测试

    2.1使用功能测试驱动开放一个最简单的应用 # functional_tests.py # -*- coding: utf-8 -*- from selenium import webdriver b ...

  4. python使用unittest模块selenium访问斗鱼获取直播信息

    import unittest from selenium import webdriver from bs4 import BeautifulSoup as bs class douyu(unitt ...

  5. 接口测试基础——第6篇unittest模块(三)

    今天是unittest最后一讲,我们解决一下如何只运行一次setUp和tearDown方法以及简单的数据驱动的知识. 1.只运行一次setUp和tearDown方法 很简单,只需要把setUp和tea ...

  6. 接口测试基础——第6篇unittest模块(二)

    通过上次的运行,大家应该已经发现了,就是我们写了三个用例,那么在测试报告中setUp和tearDown方法分别运行了三次.没错,这也就是说,每次运行用例之前都会运行setUp和tearDown方法.今 ...

  7. Python unittest模块心得(一)

    关于unittest模块的一些心得,主要是看官网的例子,加上一点自己的理解,官网地址:https://docs.python.org/3.6/library/unittest.html 基础概念介绍: ...

  8. unittest模块在linux报错: AttributeError: module 'unittest' has no attribute 'TestRunner'

    一开始在windows下运行没有问题,但是在linux下运行却报如下错误: ​ AttributeError: module 'unittest' has no attribute 'TestRunn ...

  9. thinkphp访问不存在的模块或者方法跳转到404页面

    使用的thinkphp 版本是3.2.0, 在config.php中配置 404地址,即可: 'TMPL_EXCEPTION_FILE' => './Application/Home/View/ ...

随机推荐

  1. Codeforces Round #564 (Div. 2) D. Nauuo and Circle(树形DP)

    D. Nauuo and Circle •参考资料 [1]:https://www.cnblogs.com/wyxdrqc/p/10990378.html •题意 给出你一个包含 n 个点的树,这 n ...

  2. JUnit4---Hamcrest匹配器常用方法总结

    一.Hamcrest是什么? Hamcrest is a library of matchers, which can be combined in to create flexible expres ...

  3. 解决应用服务器变为集群后的Session问题

    2.2.4.2 解决应用服务器变为集群后的Session问题 先来看一下什么是Session. 用户使用网站的服务,基本上需要浏览器与Web 服务器的多次交互.HTTP 协议本身是无状态的,需要基于H ...

  4. dotnet core 发布只带必要的依赖文件

    在使用 dotnet core 发布独立项目的时候,会带上大量依赖的库,但是通过微软提供的工具可以去掉一些在代码没有用到的库. 本文介绍的工具是 Microsoft.Packaging.Tools.T ...

  5. UVA - 10480 Sabotage (Dinic)

    The regime of a small but wealthy dictatorship has been abruptly overthrown by an unexpected rebel-l ...

  6. vagrant在windows下的安装和配置(一)

    记录一下安装和配置过程中的一些坑步骤一分别下载vagrant和VirtualBox,我这里下载的是vagrant_1.9.1.msi 和 VirtualBox-5.1.14-112924-Win.ex ...

  7. TDengine 时序数据库的 ADO.Net Core 提供程序 Maikebing.EntityFrameworkCore.Taos

    简介 Entity, Framework, EF, Core, Data, O/RM, entity-framework-core,TDengine Maikebing.Data.Taos 是一个基于 ...

  8. 以windows服务方式快速部署免安装版Postgres数据库

    目录 以windows服务方式快速部署免安装版Postgres数据库 1.下载Postgresql数据库免安装包 2.安装环境准备及验证 解压文件 测试环境依赖 3.创建并初始化数据目录 创建数据目录 ...

  9. django框架(2)

    cookie和session 1.cookie不属于http协议范围, 由于http协议无法保持状态, 但实际情况, 我们却又需要"保持状态",因此cookie就是在这样一个场景下 ...

  10. Go处理PDF

    工作中经常会遇到一些pdf文件处理的问题,一千种pdf有一千种处理方式,每次都是绞尽脑汁和这些pdf战斗到底. 本人又是一个gopher,所以这篇文章会以一个goper的视角,列举一下我所经历过的每一 ...