unittest2框架的使用

目录

一、unittest2介绍:

二、基本流程:

三、代码举例如下:

四、进阶-封装重复代码:

五、断言

六、定义suite一次性执行所有用例

七、生成测试报告

八、规范:


一、unittest2介绍:

  • 是python自带的一个单元测试的测试框架
  • 可以结合selenium、request实现UI和接口的自动化测试
  • 无需额外安装,python中已经加载了unittest2框架

二、基本流程:

  1. 所以第一步我们直接导入unittest2包即可:import unittest2
  2. 创建一个类并继承unittest2代码库中的TestCase类,表示我们当前的类是一个测试用例类:class unittest2Demo(unittest2.TestCase)
  3. 声明一个以test开头的方法:def test_login(self):
    • 以test开头表示这个方法是一个测试用例方法,该方法可以直接运行
    • 普通的方法就不能直接运行,只有被调用才会执行
  4. 重写父类中的两个方法:
    • setUp(): 在每条测试用例方法开始之前,要做的预置条件。
    • tearDown(): 在每条测试用例方法结束后,要做的场景还原。
  5. 重写父类中的两个方法:
    • setUpClass(): 在类中所有方法开始之前,要做的预置条件
    • tearDownClass(): 在类中所有方法之后,要做的场景还原工作。
    • 需要在方法上面添加装饰器@classmethod
  6. 在最后添加main方法:
    • if__name__=='__main__': 
      • 如果在当前文件中右键运行,才会执行下面的语句
      • 如果在其他文件中右键运行,下面的语句不能被调用和执行
    • 调用unittest2.main()方法:表示调用unittest2的主方法,这样就会执行当前类中的所有方法。
  7. Note: 
    • 根据光标位置的不同,可以选择执行不同的测试用例。
    • 测试类中的用例执行顺序,按照以test开头的方法后的Ascill码顺序执行(0~9,A~Z,a~z)

三、代码举例如下:

# unittest2是一个单元测试框架,接下来学习如何使用这个框架
# 导入包
import unittest2

# 创建类,并继承代码库中的TestCase,表示当前类是测试用例类
class Unittest2Demo(unittest2.TestCase):
    def test_login(self):
        print("登录")
        self.func()

    def func(self):
        print("不以test开头的普通方法")

    def test_register(self):
        print("注册")

    def test_aaa(self):
        print("测试字母排列顺序")

    def setUp(self):
        print("setUp")

    def tearDown(self):
        print("tearDown")

    @classmethod
    def setUpClass(cls):
        print("setUpClass")
        
    @classmethod
    def tearDownClass(cls):
        print("tearDownClass")

if __name__ == '__main__':
    unittest2.main()

将光标放在main方法那一行,运行结果如下:

setUpClass
tearDownClass
setUp
测试字母排列顺序
tearDown
setUp
登录
不以test开头的普通方法
tearDown
setUp
注册
tearDown


Ran 3 tests in 0.015s

OK

Process finished with exit code 0

 分析结果:

  1. 一共创建了三个以test开头的测试方法以及一个普通方法,在直接调用的时候只有测试方法被调用。
  2. 以a开头的case被优先执行,
  3. 每个case都会执行一遍setUp和tearDown。
  4. 在类中全部case开始和结束的时候执行setUpClass和tearDownClass.
  5. 调用setUp和tearDown,setUpClass和tearDownClass的时候和书写位置无关,只要声明就会在每个case调用之前执行。

四、进阶-封装重复代码

  1. 创建一个父类BaseTestCase, 实现setUp和tearDown,setUpClass和setUpClass和tearDownClass方法
  2. 以后的测试用例继承这个父类,继承父类,就继承了父类的所有方法,就不需要再每个用例都重新写方法了。

五、断言

断言---自动判断测试用例执行的结果是否成功

主要检查点有两个:

  1. 页面级别的检查
    1. 网页的标题
    2. 网址
  2. 页面元素级别的检查
    1. 元素的文本
    2. 元素的某个属性
# 获取网页标题
print(self.driver.title)
# 获取网址
print(self.driver.current_url)
# 获取元素文本
welcome = self.driver.find_element(By.CSS_SELECTOR, ".site-nav-right.fr > a:nth-child(1)").text
print(welcome)
# 获取元素的某个属性
search = self.driver.find_element(By.CSS_SELECTOR, ".btn1").get_attribute("value")  # 获取搜索按钮的value属性

加上assert断言语句判断对错,最常用的就是判断是否相等assertEqual(预期结果, 实际结果)

self.assertEqual("我的会员中心 - 道e坊商城", self.driver.title)
self.assertEqual("http://localhost/index.php?m=user&c=index&a=index", self.driver.current_url)
self.assertEqual("您好 xujiaming", welcome)
self.assertEqual("搜    索", search)

六、定义suite一次性执行所有用例

  1. 在项目的根节点创建python文件run_all_cases
  2. 找出所有的测试用例suite = unittest2.defaultTestLoader.discover("测试用例文件夹名", "测试用例文件名的规则")
  3. 执行找出的测试用例集

 代码如下,找出上述图中所有的测试用例:

import unittest2

if __name__ == '__main__':
    suite = unittest2.defaultTestLoader.discover("./test_case", "*Test.py")
    unittest2.TextTestRunner().run(suite)

七、生成测试报告

TextTestRunner是unittest2自带的测试报告执行方法,但是它是以文本来显示的,不便于阅读。

所以我们通常是去下载使用HTMLTestRunner来执行测试用例,它提供了一个美观的测试报告的模板

流程:

  1. 从网上下载HTMLTestRunner模板,但是官网提供的是适用于py2的模板,在py3上想使用的话需要自己修改代码,网上也有很多教程。(在我的资源中我也上传了适用于py3的模板,可以去下载使用)
  2. 在我们的项目下创建一个名为lib的Python文件夹,用来存放一些额外下载的第三方类。
  3. 将HTMLTestRunner复制到lib文件夹下。
  4. 导入类 from lib.HTMLTestRunner import HTMLTestRunner
  5. 实例化HTMLTestRunner这个类
    1. file = open(测试报告的路径, "wb")
      1. 如果不写wb,那就是默认以只读方式打开
      2. w表示以写的方式打开文件
      3. b表示以二进制的方式
    2. HTMLTestRunner(二进制文件, 日志的详细程度, 报告的标题, 报告的正文, 测试人员的名字) 
    3. 格式可以按住ctrl然后点击HTMLTestRunner,直接复制就好了
  6. 通过这个类的实例化对象,调用run(suite)方法
  7. 注意:运行模式要改为以python文件而不是测试框架模式运行(在框架中右键默认运行方式是以框架模式运行的),否则是不会生成报告滴。
import unittest2
from lib.HTMLTestRunner import HTMLTestRunner

if __name__ == '__main__':
    # 1. 找到所有需要执行的测试用例
    suite = unittest2.defaultTestLoader.discover("./test_case", "*Test.py")
    # 2. 执行找到的测试用例集
    # unittest2.TextTestRunner().run(suite)
    # 3. 生成测试报告
    # 3.1指定测试报告的位置
    path = "report/TestReport.html"  # 新建一个report的名字TestReport.html 
    file = open(path, "wb")  # w表示写,b表示二进制
    HTMLTestRunner(stream=file, verbosity=1, title="自动化测试报告", description="测试环境:Chrome", tester="Tom").run(suite)

八、规范:

  1. 在一个项目文件夹下,按照不同的需求去新建不同的Python文件夹
  2. test_case文件夹用以存放测试用例
  3. test_data文件夹用以存放需要导入的数据
  4. lib用以存放一些第三方类或其他资源
  5. func可以存放一些封装的方法
  6. report用来存放生成的报告。
  7. 在项目文件夹根目录下新建一个python file来执行所有的测试用例。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BetterFate!

爱你哦!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值