web自动化测试UintTest框架的基本组成

本文介绍了Python内置的单元测试框架UnitTest的使用,包括批量执行测试用例、丰富的断言功能、测试套件和文本测试运行器。还详细阐述了TestLoader如何自动加载测试用例,以及fixture(setUp/tearDown)在不同级别的应用。此外,文章讨论了断言的重要性和常见用法,并提到了参数化的概念及其在减少冗余代码中的作用。
摘要由CSDN通过智能技术生成

一、UnitTest框架

1.1 为什么使用UnitTest框架?

1. 批量执行用例

2. 提供丰富的断言知识

3. 可以生成报告

1.2 什么是UnitTest框架

python自带一种单元测试框架

1.3 核心要素

1). TestCase(测试用例)

2). TestSuite(测试套件)

3). TextTestRunner(以文本的形式运行测试用例)

4). TestLoader(批量执行测试用例-搜索指定文件夹内指定字母开头的模块) 【推荐】

5). Fixture(固定装置(两个固定的函数,一个初始化时使用,一个结束时使用))

TestCase:

说明:测试用例

步骤:

1. 导包 import unittest

2. 新建测试类并继承 unittest.TestCase

3. 测试方法必须以test字母开头

运行:

1. 运行测试类所有的测试方法,光标定位到类当前行右键运行

2. 运行单个测试方法:光标放到测试方法当前行。

TestSuite:

说明:测试套件

步骤:

1. 导包

2. 获取测试套件对象 suite = unittest.TestSuite()

3. 调用addTest()方法 添加测试用例

添加测试用例方法:

1. suite.addTest(类名("方法名称")) # 添加指定类中指定的测试方法

2. suite.addTest(unittest.makeSuite(类名)) # 添加指定类中所有已test开头的方法

TextTestRunner:

说明:执行测试套件方法

步骤:

1. 导包

2. 实例化后去执行套件对象 runner = unittest.TextTestRunner()

3. 调用run方法去执行 runner.run(suite)

TestLoader:

说明:

1. 将符合条件的测试方法添加到测试套件中

2. 搜索指定目录文件下指定字母开头的模块文件下test开始的方法,并将这些方法添加到测试套件中,最后返回测试套件

操作:

1. 导包

import unittest

2. 调用TestLoader()

写法1. suite = unittest.TestLoader().discover("指定搜索的目录文件","指定字母开头模块文件")

写法2. suite = unittest.defaultTestLoader.discover("指定搜索的目录文件","指定字母开头模块文件") 【推荐】

注意:如果使用写法1,TestLoader()必须有括号。

3. 执行测试套件

unittest.TextTestRunner().run(suite)

TestSuite与TestLoader区别:

共同点:都是测试套件

不同点:实现方式不同

TestSuite: 要么添加指定的测试类中所有test开头的方法,要么添加指定测试类中指定某个test开头的方法

TestLoader: 搜索指定目录下指定字母开头的模块文件中以test字母开头的方法并将这些方法添加到测试套件中,最后返回测试套件

二、fixture

说明:装置函数(setUp、tearDown)

级别:

1). 函数级别 def setUp() / def tearDown()

特性:几个测试函数,执行几次。每个测试函数执行之前都会执行 setUp,执行之后都会执行tearDwon

2). 类级别 def setUpClass() / def tearDownClass()

特性:测试类运行之前运行一次setUpClass 类运行之后运行一次tearDownClass

注意:类方法必须使用 @classmethod修饰

3). 模块级别:def setUpModule() / def tearDownModule()

特殊:模块运行之前执行一次setUpModule ,运行之后运行一次tearDownModule

提示:

无论使用函数级别还是类级别,最后常用场景为:

初始化:

1. 获取浏览器实例化对象

2. 最大化浏览器

3. 隐式等待

结束:

关闭浏览器驱动对象

三、断言

3.1 什么是断言?

让程序代替人为判断执行结果是否与预期结果相等的过程

3.2 为什么要断言?

自动化脚本执行时都是无人值守,需要通过断言来判断自动化脚本的执行是否通过

注:自动化脚本不写断言,相当于没有执行测试一个效果。

3.3 常用断言

1. self.assertEqual(ex1, ex2) #判断ex1 是否相等ex2

2. self.assertIn(ex1 ,ex2) # ex2是否包含ex1 注意:所谓的包含不能跳字符

3. self.assertTrue(ex) # 判断ex是否为True

3.4 断言练习

目标:tpshop登录

方法:

def setUp():

# 获取driver

# 打开url

# 最大化浏览器

# 隐式等待

def tearDown():

# 关闭浏览器驱动

def test_login_code_null():

# 根据业务流程编写

# ...

# 失败截图

3.5 扩展

断言两种实现方式

方式1:使用unittest框架中断言,详情请参考以上相关知识点。

方式2:使用python自带断言

1. assert str1 == str2 # 判断str1 是否与str2相等

2. assert str1 in str2 # 判断str2 是否包含str1

3. assert True/1 # 判断是否为True

四、参数化

4.1 为什么要参数化

解决冗余代码问题;

4.2 什么是参数化

说明:根据需求动态获取参数并引用的过程

4.3 参数化应用场景

场景:解决相同业务逻辑,不同测试数据问题。

4.4 应用:

1. 安装插件

通过命令:

安装:

pip install parameterized

验证:

pip show parameterized

通过pycharm:File-->setting-->Project 工程名称

2. 应用插件

1. 导包 from parameterized import parameterized

2. 修饰测试函数 @parameterized.expand([数据])

数据格式:

1. 单个参数:类型为列表

2. 多个参数:类型为列表嵌套元祖

3. 在测试函数中的参数设置变量引用参数值,注意:变量的数量必须和数据值的个数相同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值