python接口自动化测试 - unittest框架基本使用

unittest简单介绍

unittest基础使用

 1 # 导入unittest模块
 2 import unittest
 3
 4
 5 # 创建单元测试类,继承unittest.TestCase
 6 class testCase(unittest.TestCase):
 7
 8     def setUp(self):
 9         print("case执行前")
10
11     def tearDown(self):
12         print("case执行后")
13
14     @classmethod
15     def setUpClass(cls):
16         print("对象执行前")
17
18     @classmethod
19     def tearDownClass(cls):
20         print("对象执行后")
21
22     # 测试用例
23     def test_01(self):
24         print("test01")
25
26     def test_02(self):
27         print("test02")
28
29
30 if __name__ == ‘__main__‘:
31     unittest.main()

运行结果

 1 对象执行前
 2 case执行前
 3 test01
 4 case执行后
 5 case执行前
 6 test02
 7 case执行后
 8 对象执行后
 9
10
11 Ran 2 tests in 0.002s
12
13 OK

这里包含的知识点:

unittest.Testcase

  • 自己创建的单元测试类都要继承它,它是所有单元测试类的基类

setUp

  • 用于每个测试用例执行前的初始化工作
  • 所有类中方法的入参为 self ,定义实例变量也要 self.变量

tearDown

  • 每个测试用例执行后的都会执行此方法

setUpClass

  • 每个单元测试类运行前调用该方法,只会执行一次
  • 属于类方法,需要加上装饰器 @classmethod
  • 默认入参是 cls ,指的就是“类对象”本身,其实和self没什么区别,用法一致

tearDownClass

  • 每个单元测试类运行后调用该方法,只会执行一次
  • 属于类方法,需要加上装饰器 @classmethod

测试用例

  • 必须以“test_”开头命名的方法,否则无法识别并执行
  • 方法里面需要有断言,才能在最后运行时有该用例的执行结果
  • 可包含多个测试用例

unittest.main()

  • 运行单元测试
  • 该命令会搜索当前module 下所有以 test开头的测试用例,并运行它们
  • 执行顺序是按照case的命名

unitteest提供的各种断言方式

 1 class testCase(unittest.TestCase):
 2
 3     def test_03(self):
 4         # 断言 - 是否为True
 5         flag = True
 6         self.assertTrue(flag, msg="测试失败的信息,可不填")
 7
 8     def test_04(self):
 9         # 断言 - 是否为False
10         flag = False
11         self.assertFalse(flag)
12
13     def test_05(self):
14         # 断言 - 提供的两个参数是否相同(任意类型)
15         self.assertEqual("123", "123")  # 字符串
16         self.assertEqual({"a": 1}, {"a": 1})  # 字典
17         self.assertEqual([1, 2], [1, 2])  # 列表
18         self.assertEqual((1, 2), (1, 2))  # 元组
19         self.assertEqual({1, 2}, {1, 2})  # 集合
20
21     def test_06(self):
22         # 断言 - 列表是否相同
23         self.assertListtEqual([1, 2], [1, 2])
24
25     def test_07(self):
26         # 断言 - 字典是否相同
27         self.assertDictEqual({"a": 1}, {"a": 1})
28
29     def test_08(self):
30         # 断言 - 元组是否相同
31         self.assertTupleEqual((1, 2), (1, 2))
32
33     def test_09(self):
34         # 断言 - 集合是否相同
35         self.assertSetEqual({1, 2}, {1, 2})

这是比较常见的断言方式,当然还有一些比较容易理解的断言方式就没有一一举例啦,具体可以看看下面列表


方法


等同于python里面的写法


assertEqual(a, b)


a == b


assertNotEqual(a, b)


a != b


assertTrue(x)


bool(x) is True


assertFalse(x)


bool(x) is False


assertIs(a, b)


a is b


assertIsNot(a, b)


a is not b


assertIsNone(x)


x is None


assertIsNotNone(x)


x is not None


assertIn(a, b)


a in b


assertNotIn(a, b)


a not in b


assertIsInstance(a, b)


isinstance(a, b)


assertNotIsInstance(a, b)


not isinstance(a, b)


assertRegex(s, r)


r.search(s)

unittest测试用例跳过执行

 1 class testCase(unittest.TestCase):
 2
 3     # 直接跳过
 4     @unittest.skip("直接跳过")
 5     def test_skip(self):
 6         self.fail("shouldn‘t happen")
 7
 8     # 满足condition则跳过
 9     @unittest.skipIf(1 < 2, "满足condition则跳过")
10     def test_skipIf(self):
11         print("skip if")
12
13     # 不满足condition则跳过
14     @unittest.skipUnless(sys.platform.startswith("win"), "需要window平台才不会跳过")
15     def test_skipUnless(self):
16         print("skip Unless")
17
18     # 预计该测试用例会测试失败
19     @unittest.expectedFailure
20     def test_fail(self):
21         self.assertEqual(1, 0, "broken")
22
23     # 方法体内跳出不执行case
24     def test_maybe_skipped(self):
25         if True:
26             self.skipTest("调用unittest的skipTest,在方法体内满足某些条件则跳过该case")
27         pass

运行结果

 1 Skipped: 调用unittest的skipTest,在方法体内满足某些条件则跳过该case
 2
 3 Skipped: 直接跳过
 4
 5 Skipped: 满足condition则跳过
 6 skip Unless
 7
 8
 9 Ran 5 tests in 0.010s
10
11 OK (skipped=3, expected failures=1)

跳过执行测试用例共有四种写法

  • @unittest.skip(reason) :跳过测试用例,reason  为测试被跳过的原因
  • @unittest.skipIf(condition, reason) :当 condition 为真时,跳过测试用例。
  • @unittest.skipUnless(condition, reason) :跳过测试用例,除非 condition 为真
  • @unittest.expectedFailure :把测试用例标记为预计失败;如果测试不通过,会被认为测试成功;如果测试通过了,则被认为是测试失败

self.skipTest(reason)

在方法体内满足某些条件下才跳过执行该测试用例

跳过执行测试用例注意点

  • 被跳过的测试的  setUp() 和  tearDown()  不会被运行
  • 只输入 unittest.skip ,也可以正常跳过,不必写reason
  • 若输入 unittest.skip() ,括号内必须写reason,不得为空
  • 可以针对单元测试类级别设置跳过执行(在class声明上面直接加装饰器即可),该单元测试类所有测试用例不会被执行
  • 被跳过的类的 setUpClass() 和 tearDownClass() 不会被运行
  • 当方法体内调用了 self.skipTest(reason) 方法,该测试用例还是会调用 setUp() 和 tearDown()

原文地址:https://www.cnblogs.com/poloyy/p/12234455.html

时间: 2024-11-06 03:29:05

python接口自动化测试 - unittest框架基本使用的相关文章

python接口自动化测试 - unittest框架suite、runner详细使用

test suite 测试套件,理解成测试用例集 一系列的测试用例,或测试套件,理解成测试用例的集合和测试套件的集合 当运行测试套件时,则运行里面添加的所有测试用例 test runner 测试运行器 用于执行和输出结果的组件 test suite.test runner基础使用 单元测试类 1 # 创建单元测试类,继承unittest.TestCase 2 class testCase(unittest.TestCase): 3 4 # 测试case 5 def test_01(self):

python接口自动化--unittest框架+HTMLTestRunner

Unitest是python里面的单元测试框架,方便组建测试用例,执行用例,并生成测试报告 注意: 测试类,继承单元测试unitest.TestCase这个类 测试方法(用例)必须以test开头 测试类就是多个用例的一个集合,相当于是测试用例的一个模块 1 import unittest 2 3 class TestCase(unittest.TestCase): 4 5 def testPlus(self): 6 a = 2 7 b = 3 8 c = a + b 9 self.assertE

Python接口自动化测试框架实战 从设计到开发

第1章 课程介绍(不要错过)本章主要讲解课程的详细安排.课程学习要求.课程面向用户等,让大家很直观的对课程有整体认知! 第2章 接口测试工具Fiddler的运用本章重点讲解如何抓app\web的http\https请求包.如何模拟请求数据.过滤规则及修改响应数据.如何解决无法抓包问题        以及fiddler接口测试,让大家能应用好工具! 第3章 Requests常见方法实战运用本章重点讲解 get\post请求测试.接口测试中结果处理.上传\下载文件接口测试.请求中header及coo

selenium + python自动化测试unittest框架学习(二)

1.unittest单元测试框架文件结构 unittest是python单元测试框架之一,unittest测试框架的主要文件结构: File >report >all_case.py >test_case >__init__.py >test_case1..... >public >__init__.py >login.py >loginout.py test_case文件夹主要存放测试用例,且测试用例命名以test_开头 public文件夹是test

python单元测试之unittest框架

python单元测试之unittest框架 一.什么是单元测试 单元测试是用来对一个模块.一个函数或者一个类来进行正确性检验的测试工作. 比如对于函数abs(),我们可以编写的测试用例为: (1)输入正数,比如1.1.2.0.99,期待返回值与输入相同 (2)输入复数,比如-1.-1.2.-0.99,期待返回值与输入相反 (3)输入0,期待返回0 (4)输入非数值类型,比如None.[].{}.期待抛出TypeError 把上面这些测试用例放到一个测试模块里,就是一个完整的单元测试 我们先写一个

颠覆你的Python接口自动化测试,约吗?

课程 一直以来,我都很喜欢收集大家问的比较多的问题,然后一边回答一边整理成文.今天也不例外,只是由一问一答,变成了三问三答. [你问] 我们为什么要做接口测试? [我答] 之前在<测试路上你问我答>系列里写过一篇答疑,详见<接口测试的是什么和为什么?> [你问] Python 语言现在为什么这么火? [我答] 这个问题,其实我的回答未必全面,大家在简书或者任何一个技术论坛搜索一下,很多阐述.推荐下面这篇:Python 为何能坐稳 AI 时代头牌语言? [你问] 老师,我之前看了你写

基于Python接口自动化测试框架(初级篇)附源码

引言 很多人都知道,目前市场上很多自动化测试工具,比如:Jmeter,Postman,TestLink等,还有一些自动化测试平台,那为啥还要开发接口自动化测试框架呢?相同之处就不说了,先说一下工具的局限性: 1.测试数据不可控:    接口虽然是对业务逻辑.程序代码的测试,而实际上是对数据的测试,调用接口输入一批数据,通过断言代码验证接口返回的数据,整个过程围绕数据测试.    如果返回的数据不是固定的,是变化的,那么断言失败,就无法知道是接口程序错误引起的,还是数据变化引起的,所以就需要进行测

selenium + python自动化测试unittest框架学习(一)selenium原理及应用

unittest框架的学习得益于虫师的<selenium+python自动化实践>这一书,该书讲得很详细,大家可以去看下,我也只学到一点点用于工作中,闲暇时记录下自己所学才能更加印象深刻.unittest框架学习需要掌握以下知识点: (1)Selenium原理及工具使用 (2)webdriver元素定位,id,name,class name,css seletor,xpath (3)python语言基础,模块,参数化,语言,装饰器 (4)unittest框架认识及学习:模块化,断言,参数化,数

python接口自动化测试框架

环境:python3 + unittest + requests Excel管理测试用例, HTMLTestRunner生成测试报告 测试完成后邮件发送测试报告 jsonpath方式做预期结果数据处理,后期多样化处理 后期扩展,CI持续集成 发送邮件效果: 整体结构: common模块 class IsInstance: def get_instance(self, value, check): flag = None if isinstance(value, str): if check ==