Python中的单元测试框架包含:doctest、unittest、pyttest、nose等,使用unittest单元测试框架不需要自行定义断言失败的提示,并且当一个测试函数执行失败后,后面的测试函数还会继续执行下去。下面以一个简单计算器来编写自动化测试用例。被测试的代码如下:

 # 计算器类
class Calculator:
def __init__(self, a, b):
self.a = int(a)
self.b = int(b) def add(self):
return self.a + self.b def sub(self):
return self.a - self.b def mul(self):
return self.a * self.b def div(self):
return self.a / self.b

通过unittest单元测试框架编写如下测试用例:

 import unittest

 from files.unit_test.calculator import Calculator

 class TestCalculator(unittest.TestCase):
def test_add(self):
c = Calculator(3, 5)
result = c.add()
self.assertEqual(result, 8) def test_sub(self):
c = Calculator(10, 5)
result = c.sub()
self.assertEqual(result, 5) def test_mul(self):
c = Calculator(5, 7)
result = c.mul()
self.assertEqual(result, 34) def test_div(self):
c = Calculator(12, 6)
result = c.div()
self.assertEqual(result, 2) if __name__ == '__main__':
unittest.main()

执行结果展示:

一、使用unittest单元测试框架的规则

1.创建一个测试类(TestCalculator),该类必须继承unittest模块的TestCase类;

2.创建的测试方法必须以test开头。

通过unittest提供的assertEqual()方法来断言结果与预期是否一致,该方法由TestCase父类提供,由于继承了该类,可用self调用。关于测试结果:

(1)“.”表示一条运行通过的测试用例。

(2)“F”表示一条运行失败的测试用例。

(3)“E”表示一条运行错误的测试用例。

(4)“s”表示一条运行跳过的测试用例。

二、重要的概念

1.Test Case

  最小的测试单元。用于检查特定输入集合的特定返回值。unittest提供了TestCase基类,脚本中创建的测试类需要继承该基类,用来创建新的测试用例。

2.Test Suit

  测试套件是测试用例、测试套件或两者的集合,用于组装一组要运行的测试。

3.Test Runner

  是一个组件,用于协调测试的执行并向用户提供结果。可以使用图形界面、文本界面或返回特殊值来展示执行测试的结果。unittest提供了TextTestRunner类运行测试用例,为了生成HTML格式的测试报告,会选择使用HTMLTestRunner运行类。

4.Test Fixture

  代表执行一个或多个测试所需的环境准备,以及关联的清理动作。例如,创建临时或者代理数据库、目录,或启动服务器进程。unittest中提供了setUp()/tearDown()、setUpClass()/tearDownClass()等方法来完成这些操作。

基于这四个概念的理解,修改以上测试用例如下:

 import unittest

 from files.unit_test.calculator import Calculator

 class TestCalculator(unittest.TestCase):

     # 测试用例前置动作
def setUp(self):
print("test start") # 测试用例后置动作
def tearDown(self):
print("test end") def test_add(self):
c = Calculator(3, 5)
result = c.add()
self.assertEqual(result, 8) def test_sub(self):
c = Calculator(10, 5)
result = c.sub()
self.assertEqual(result, 5) def test_mul(self):
c = Calculator(5, 7)
result = c.mul()
self.assertEqual(result, 34) def test_div(self):
c = Calculator(12, 6)
result = c.div()
self.assertEqual(result, 2) if __name__ == '__main__':
# 创建测试套件
suit = unittest.TestSuite()
suit.addTest(TestCalculator("test_add"))
suit.addTest(TestCalculator("test_sub"))
suit.addTest(TestCalculator("test_mul"))
suit.addTest(TestCalculator("test_div"))
# 创建测试运行器
runner = unittest.TestRunner()
runner.run(suit)

  在测试用例的执行时,抛弃了unittest提供的main()方法,而是调用了TestSuite类下面的addTest()来添加测试用例。因为一次只能添加一条用例,所以需要指定测试类及测试方法。然后调用TextTestRunner类下面的run()运行测试套件。这样做比直接用main()麻烦,首先,测试用例的执行顺序可以由测试套件的添加顺序控制,而main()方法只能按照测试类、方法的名称来执行测试用例。例如,TestA类比TestB类限制性,test_add()用例比test_div()用例限制性;其次,当一个测试文件中有很多测试用例时,并不是每次都要执行所有的测试用例,尤其是比较耗时的UI自动化测试。因而通过测试套件和测试运行器可以灵活的控制要执行的测试用例。

Selenium实战(四)——unittest单元测试框架1的更多相关文章

  1. Selenium(十七):unittest单元测试框架(三) 脚本分析、编写Web用例

    1. 带unittest的脚本分析 也许你现在心里还有疑问,unittest框架与我们前面所编写的Web自动化测试之间有什么必然联系吗?当然有,既然unittest可以组织.运行测试用例,那么为什么不 ...

  2. Selenium(十八):unittest单元测试框架(四) HTML测试报告

    1. HTML测试报告 对测试人员来而言,测试的产出很难衡量.换句话说,测试人员的价值比较难以量化和评估,相信这一点对软件测试人员来说深有体会.我们花费了很多时间与精力所做的自动化测试也是如此.所以, ...

  3. Selenium 2自动化测试实战26(unittest单元测试框架)

    一.unittest单元测试框架 1.认识单元测试 1.断言方法 #计算器类 #coding:utf-8 #计算器类 class Count: def __init__(self,a,b): self ...

  4. 四. 引入unittest单元测试框架

    1.   安装 SeleniumIDE(firefox) (1)下载地址:https://addons.mozilla.org/en-US/firefox/addon/selenium-ide/ (2 ...

  5. Selenium+Python ---- 免登录、等待、unittest单元测试框架、PO模型

    1.免登录在进行测试的过程中难免会遇到登录的情况,给测试工作添加了工作量,本文仅提供一些思路供参考解决方式:手动请求中添加cookies.火狐的profile文件记录信息实现.人工介入.万能验证码.去 ...

  6. Python+selenium之简单介绍unittest单元测试框架

    Python+selenium之简单介绍unittest单元测试框架 一.unittest简单介绍 unittest支持测试自动化,共享测试用例中的初始化和关闭退出代码,在unittest中最小单元是 ...

  7. Python+Selenium框架设计篇之-简单介绍unittest单元测试框架

    前面文章已经简单介绍了一些关于自动化测试框架的介绍,知道了什么是自动化测试框架,主要有哪些特点,基本组成部分等.在继续介绍框架设计之前,我们先来学习一个工具,叫unittest.       unit ...

  8. Python+Selenium ----unittest单元测试框架

    unittest是一个单元测试框架,是Python编程的单元测试框架.有时候,也做叫做“PyUnit”,是Junit的Python语言版本.这里了解下,Junit是Java语言的单元测试框架,Java ...

  9. Selenium基于Python web自动化基础二 -- 免登录、等待及unittest单元测试框架

    一.免登录在进行测试的过程中难免会遇到登录的情况,给测试工作添加了工作量,本文仅提供一些思路供参考解决方式:手动请求中添加cookies.火狐的profile文件记录信息实现.人工介入.万能验证码.去 ...

随机推荐

  1. Mysql百万数据量级数据快速导入Redis

    前言 随着系统的运行,数据量变得越来越大,单纯的将数据存储在mysql中,已然不能满足查询要求了,此时我们引入Redis作为查询的缓存层,将业务中的热数据保存到Redis,扩展传统关系型数据库的服务能 ...

  2. sockaddr与sockaddr_in的关系

    WIN7+VS2013 sockaddr // // Structure used to store most addresses. // typedef struct sockaddr { #if ...

  3. EOJ Monthly 2019.2 E 中位数 (二分+中位数+dag上dp)

    题意: 一张由 n 个点,m 条边构成的有向无环图.每个点有点权 Ai.QQ 小方想知道所有起点为 1 ,终点为 n 的路径中最大的中位数是多少. 一条路径的中位数指的是:一条路径有 n 个点,将这  ...

  4. Qt使用双缓冲绘图时报错:pure virtual method called

    这个问题折磨了我将近四个小时. 起始原因是想写一个双缓冲绘图的画板,大概看了一下网上的教程,理解双缓冲绘图的思想后,没有完全参照网上的步骤,想着用自己的思路实现一下.(其实和网上的教程也没有太大差别) ...

  5. Burpsuite Pro 2020.1最新破解版

    简介 Burp Suite 是用于攻击web 应用程序的集成平台,包含了许多工具.Burp Suite为这些工具设计了许多接口,以加快攻击应用程序的过程.所有工具都共享一个请求,并能处理对应的HTTP ...

  6. centos下升级php到5.6

    今天正好用空把php环境升级到5.6版本,首先我之前的环境是源码包编译的lnmp环境 首先到php官方网站上下载一个php5.6的tar包,放到机器上面后,开始安装,安装前先将nginx,mysql, ...

  7. Redis(十):pub/sub 发布订阅源码解析

    谈到发布订阅模式,相信不会陌生,典型的观察者模式的实现.然而从表面来看,本地实现一个wait/notify通知.register/update调用, 实现一个远程mq服务, 还有本文说的 pub/su ...

  8. zookeeper从入门到放弃

    第1章 Zookeeper入门 1.1 概述 Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目. 1.2 特点 1.3 数据结构 1.4 应用场景 提供的服务包括:统 ...

  9. Linux 下用 superpi 测试 CPU 性能

  10. PgSQL备份

    SQL转储. 这里我们用到的工具是pg_dump和pg_dumpall. 这种方式可以在数据库正在使用的时候进行完整一致的备份,并不阻塞其它用户对数据库的访问.它会产生一个脚本文件,里面包含备份开始时 ...