1、测试套件的作用

在我们实际工作,使用unittest框架会有两个问题:

  1. 我们知道测试用例的执行顺序是根据测试用例名称顺序执行的,在不改变用例名称的情况下,我们怎么来控制用例执行的顺序。
  2. 一个测试文件,我们直接执行该文件即可,但如果有多个测试文件,怎么实现多个测试文件一起执行行。

要解决上面两个问题,我们就要用到测试套件TestSuite

2、使用测试套件

(1)入门示例

1)用法

  1. unittest.TestSuite():创建测试套件。
  2. addTest()addTests()方法是将测试用例添加到测试套件中。
  3. unittest.TextTextRunner():通过该类下面的run()方法来运行suite所组装的测试用例,suite测试套件为run()方法参数。

例如:将test_Demo1模块下的TestDmeo类下的test_case_01测试用例添加到测试套件中。

# 1.创建测试套件
suite = unittest.TestSuite() # 2.向测试套件中添加测试用例
# 模块名.测试类名('测试用例名')
suite.addTest(test_Demo.TestDmeo('test_case_01')) # 3.执行测试套件中的用例
runner = unittest.TextTestRunner()
runner.run(suite)

2)示例

# 1 导入unittest
import unittest # 2 创建测试类
class TestDmeo(unittest.TestCase): # 3 编写test case
def test_case_01(self):
"""测试用例1"""
print("执行测试用例1") def test_case_02(self):
"""测试用例2"""
print("执行测试用例2") def test_case_03(self):
"""测试用例3"""
print("执行测试用例3") if __name__ == '__main__':
# 执行当前测试类中,以test开头的测试用例
# unittest.main() # 1. 创建测试套件
suite = unittest.TestSuite()
# 2. 向测试套件中添加测试用例
# 当前模块中的测试用例,可省略模块名(文件名)
suite.addTest(TestDmeo('test_case_02'))
suite.addTest(TestDmeo('test_case_03'))
suite.addTest(TestDmeo('test_case_01'))
# 3. 执行测试套件中的用例
runner = unittest.TextTestRunner()
runner.run(suite)

提示:向测试套件中添加测试用例的顺序,就是测试用例执行的顺序。(此时解决了第一个问题)

注意:

使用PyCharm执行上边代码,会按顺序执行全部测试用例,这是PyCharm问题。

使用命令行直接执行该Python文件,没有问题。

(2)根据不同的条件加载测试用例(了解)

提示:这种方式很少用,了解一下即可。推荐都用下面的方式(3)。

unittest.TestLoader():根据不同的条件加载测试用例,其中有几个方法:

  1. unittest.TestLoader().loadTestsFromName(测试用例名)
  2. unittest.TestLoader().loadTestsFromNames(测试用例名的列表)
  3. unittest.TestLoader().loadTestsFromTestCase(测试类名)
  4. unittest.TestLoader().loadTestsFromModule(模块名)
  5. unittest.TestLoader().discover()

例如:将``test_demo2模块下的TestDmeo类下的test_case_01`测试用例添加到测试套件中。

测试用例名格式:文件名+类名+方法名,一级一级的。

示例

# 1 导入unittest
import unittest # 2 创建测试类
class TestDmeo(unittest.TestCase): # 3 编写test case
def test_case_0001(self):
"""测试用例0001"""
print("执行测试用例0001") def test_case_0002(self):
"""测试用例0002"""
print("执行测试用例0002") def test_case_0003(self):
"""测试用例0003"""
print("执行测试用例0003") if __name__ == '__main__':
# 1. 创建测试套件
suite = unittest.TestSuite() # 2. 向测试套件中添加测试用例
"""
# 2.1 loadTestsFromName
# 提示:
name参数是传入文件名,字符串格式
格式:模块名.测试类名.测试用例名
"""
# suite_1 = unittest.TestLoader().loadTestsFromName('test_demo2.TestDmeo.test_case_01') """
# 2.2 loadTestsFromNames
参数是一个列表,列表中的元素格式同上
"""
# suite_1 = unittest.TestLoader().loadTestsFromNames(
# ['test_demo2.TestDmeo.test_case_01','test_demo2.TestDmeo.test_case_02']) """
# 2.3 loadTestsFromTestCase
参数一个测试类名
当前模块直接传如测试类名称即可
"""
suite_1 = unittest.TestLoader().loadTestsFromTestCase(TestDmeo) # 加入套件
suite.addTest(suite_1)
# 3. 执行测试套件中的用例
runner = unittest.TextTestRunner()
runner.run(suite)

(3)常用方式(推荐)

unittest.defaultTestLoader():通过该类下面的discover()方法可自动根据测试目录test_dir匹配查找测试用例文件,如test*.py,并将查找到的测试用例组装到测试套件中。

1)简单示例:

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

2)测试套件示例:

  1. 创建test_case包用来存放测试用例。
  2. 以上面两个测试类做例子,把test_demo1test_demo2两个测试用例类文件放入test_case包中。
  3. 编写调用用例脚本run_case.py文件执行多个测试用例。

3)说明:

test_demo1test_demo2两个文件,就是上面(1)(2)的示例。

下面是run_case.py文件内容,需求是同时执行test_demo1test_demo2两个文件中的测试用例。

"""
1.学习目标
run_case.py必须会写
2.操作步骤
2.1 明确测试用例存放路径
2.2 将要执行的用例添加到测试套件中
2.3 执行测试套件中的用例
3.注意事项
1.run_case.py文件需要放置在项目根目录下
2.所有测试用例都写在test_caset文件夹中
3.编写用例的py文件需要以test开头
"""
# 1.导入unittest
import unittest # 2.获取测试用例存放路径---测试用例存放文件夹
case_path = "./test_case" # 3.添加用例到测试套件中
"""
# 如果只添加一个文件,pattern就直接填写文件名
start_dir, 指定case目录
pattern='test*.py', 匹配文件规则,# 选择文件夹中的写test_开头的py文件
"""
discover = unittest.defaultTestLoader.discover(case_path, pattern="test*.py") # 4.执行测试套件中的用例
runner = unittest.TextTestRunner()
runner.run(discover)

最新文章

  1. 【分布式】Zookeeper序列化及通信协议
  2. XML和JSON数据格式对比
  3. 5.6 WebDriver API实例讲解(31-35)
  4. su和su -和sudo
  5. BZOJ_1609_[Usaco2008_Feb]_Eating_Together_麻烦的聚餐_(动态规划,LIS)
  6. YT新人之巅峰大决战03
  7. c++中小项堆声明和使用【转】
  8. nginx是什么nginx安装与配置之windows版
  9. 4层板的pcb创建
  10. Python——网络编程基础
  11. c#+CAD动态移动效果
  12. 自学zabbix集锦
  13. 【提取元素的值 】【追加文本append】【删除文本remove】【class的操作】【读取元素的宽度,高度】
  14. python使用os.listdir和os.walk获得文件的路径
  15. ABAP-IDOC配置
  16. android&sqlsever
  17. P2371 [国家集训队]墨墨的等式
  18. CodeForces 81D.Polycarp's Picture Gallery 乱搞
  19. C#程序集系列02,使用记事本查看可执行程序集的IL代码
  20. activeMQ的spring、springboot的DEMO

热门文章

  1. Ubuntu下安装与卸载Nginx
  2. zabbix企业级的分布式开源监控解决方案 v5.0 LTS
  3. 在Go语言项目中使用Zap日志库
  4. js发送请求给服务端
  5. Selenium click不生效 报错selenium.common.exceptions.InvalidArgumentException
  6. Mobileye独创性创新
  7. 使用ONNX将模型转移至Caffe2和移动端
  8. YOLOv3和YOLOv4长篇核心综述(上)
  9. nvJPEG Codec库
  10. 视频处理器为电池供电的设计提供4K视频编码