自动化测试过程中,自动化覆盖的功能点和对应测试用例之间的关系基本都是1 VS N,如果每次将测试用例一个个单独执行,不仅效率很低,

无法快速反馈测试结果,而且维护起来很麻烦。在python的单元测试框架unittest中,提供了批量执行的测试用例的方法。

这篇博客,介绍下unittest框架的常用类和方法,以及利用discover()方法批量执行测试用例的方法。。。

官方文档:unittest单元测试框架

一、unittest框架

首先介绍一下unittest框架和执行测试用例相关的几个模块:

1、TestCase()类

TestCase类的实例表示unittest中的逻辑测试单元,此类旨在用作基类,具体测试由具体的子类实现。该类实现了测试运行器所需的接口,以允许它驱动测试,

以及测试代码可用于检查和报告各种故障的方法。每个实例都将运行unittest的一个名为methodName的基本方法。

2、setUp()方法

该方法的主要作用是用来初始化测试环境,它在测试用例执行之前立即调用,除了AssertionError或SkipTest,通过该方法产生的任何异常都将被认为是错误的。

只有测试成功执行,才会被调用,默认什么都不做。

3、tearDown()方法

该方法的主要作用是在测试用例执行完毕后记录测试结果并恢复测试环境,即使出现异常,也会调用此方法。

4、run()方法

该方法的作用是运行测试用例,将测试结果收集到TestResult中作为传递的对象。

如果省略结果或者用None创建临时结果对象(通过调用defaultTestResult()方法),结果对象会返回给run()的调用者。

5、defaultTestResult()方法

该方法返回应该用于此测试用例类的测试结果作为实例(如果没有其他结果,实例应返回给run()方法)。

6、TestSuite()类

该类代表单个测试用例和测试套件的集合。它提供了运行测试所需的接口以使其可以像其他测试一样运行。TestSuite实例和遍历套件相同,单独运行每个测试用例。

TestSuite的行为和TestCase非常相似,但它并未实际执行测试,而是用于将测试用例聚合到一起,下面的2个方法用于向TestSuite实例中添加测试用例:

addTest():添加测试用例到TestCase或TestSuite套件中;

addTests():将迭代TestCase和TestSuite实例中的所有测试用例添加到此测试组件,相当于调用addTest()的每个元素。

7、TestLoader()类

所述TestLoader类被用来创建类和模块的测试套件。通常不需要创建该类的实例。unittest框架提供了一个可以共享的实例unittest.defaultTestLoader。

8、discover()方法

discover(start_dir, pattern ='test *.py', top_level_dir = None )

start_dir:要测试的模块名或测试用例目录;

pattern='test*.py':表示用例文件名的匹配原则,下面的例子中匹配文件名为以“test”开头的“.py”文件,星号“*”表示任意多个字符;

top_level_dir=None:测试模块的顶层目录,如果没有顶层目录,默认为None;

该方法通过从指定的开始目录递归到子目录中查找所有测试模块,并返回包含它们的TestSuite对象,只有与模式匹配测试文件和可导入的模块名称才会被加载。

所有测试模块必须可以从项目的顶层导入,如果起始目录不是顶层目录,则顶层目录必须单独指定。

如果一个测试文件的名称符合pattern,将检查该文件是否包含 load_tests() 函数,如果 load_tests() 函数存在,则由该函数负责加载本文件中的测试用例。

如果不存在,就会执行loadTestsFromModule(),查找该文件中派生自TestCase 的类包含的 test 开头的方法。

9、TestResult()类

该类用于记录哪些测试成功或失败的信息。一个TestResult对象存储一组测试的结果,在TestCase和TestSuite中保证结果正确记录。

测试框架unittest需要访问TestResult作为报告目的运行一组测试所生成的对象,为此目的TestResult和TestRunner.run()方法返回一个实例 。

二、addTest()实例

举个例子来说,如果测试用例有下面这些:

使用addTest()方法执行测试用例,示例代码如下:

# coding=utf-8
import unittest # 加载测试用例
import test_user
import test_mobile
import test_mobcode
import test_txtcode
import test_pwd
import test_signup
import test_login
import test_vipcenter
import test_search # 将测试用例添加到测试集合
suite = unittest.TestSuite()
suite.addTest(test_user.UserTest("test_user")) # 用户名
suite.addTest(test_mobile.MobileTest("test_mobile")) # 手机号码
suite.addTest(test_mobcode.MobCodeTest("test_mobcode")) # 手机验证码
suite.addTest(test_txtcode.TxtCodeTest("test_txtcode")) # 图形验证码
suite.addTest(test_pwd.PasswordTest("test_pwd")) # 密码
suite.addTest(test_signup.SignUpTest("test_signup")) # 注册功能
suite.addTest(test_login.LoginTest("test_loggin")) # 登录功能
suite.addTest(test_vipcenter.VipTest("test_vip")) # 会员中心
suite.addTest(test_search.SearchTest("test_search")) # 搜索功能 # 运行测试用例
runner = unittest.TextTestRunner()
runner.run(suite)

可以看出需要进行很多的用例导入和添加操作,如果用例成百上千条,那么这将是一场灾难!!!

三、discover()使用实例

还是上面的那些测试用例,这次使用discover()方法批量执行用例,示例代码如下:

# coding=utf-8
import unittest
from unittest import defaultTestLoader # 测试用例存放路径
case_path = './Testcase/case' # 获取所有测试用例
def get_allcase():
discover = unittest.defaultTestLoader.discover(case_path, pattern="test*.py")
suite = unittest.TestSuite()
suite.addTest(discover)
return suite if __name__ == '__main__':
# 运行测试用例
runner = unittest.TextTestRunner()
runner.run(get_allcase())

相比于addTest()方法,discover()方法更方便高效,也可以提高测试反馈速率。

PS:使用discover()方法,切记测试用例中需要执行的测试方法必须以test开头,否则无法加载!!!

以上就是关于unittest框架的一些常用类和方法的介绍,以及批量执行测试用例的2种方法,仅供参考。。。

python:unittest之discover()方法批量执行用例的更多相关文章

  1. unittest的discover方法批量执行02

    前言 我们在写用例的时候,单个脚本的用例好执行,那么多个脚本的时候,如何批量执行呢?这时候就需要用到unittet里面的discover方法来加载用例了. 加载用例后,用unittest里面的Text ...

  2. python接口自动化(二十六)--批量执行用例 discover(详解)

    简介 我们在写用例的时候,单个脚本的用例好执行,那么多个脚本的时候,如何批量执行呢?这时候就需要用到 unittest 里面的 discover 方法来加载用例了.加载用例后,用 unittest 里 ...

  3. Python 中使用 ddt 来进行数据驱动,批量执行用例,修改ddt代码

    1. 什么是数据驱动? 使用数据驱动有什么好处? 用例执行是靠数据来驱动的,每条测试用例除了测试数据不一样意外,所有的用例代码都是一样的,为了使用例批量执行,我们会使用数据驱动的思想来批量执行测试用例 ...

  4. python自动化-unittest批量执行用例(discover)

    前言 我们在写用例的时候,单个脚本的用例好执行,那么多个脚本的时候,如何批量执行呢?这时候就需要用到unittet里面的discover方法来加载用例了. 加载用例后,用unittest里面的Text ...

  5. Python unittest discover()方法与执行顺序补充

    一.discover更多测试用例 可以根据不同的功能创建不同的测试文件,甚至是不同的测试目录,测试文件中还可以将不同的小功能划分为不同的测试类,在类下编写测试用例,让整体结构更加清晰 但通过addTe ...

  6. unittest详解(四) 批量执行用例(discover)

    前面我们说了,对于不同文件用例,我们可以通过addTest()把用例加载到一个测试套件(TestSuite)来统一执行,对于少量的文件这样做没问题,但是如果有几十上百个用例文件,这样做就太浪费时间了. ...

  7. unittest(discover 批量执行用例)

    import unittest dir = "D:\\work_doc\\pycharm2\\python_Basics" #自动化用例所存放的路径 suit = unittest ...

  8. Python----unittest discover()方法与执行顺序

    一.Unittest discover()可以根据不同的功能创建不同的测试文件,甚至是不同的测试目录,测试文件中还可以将不同的小功能划分为不同的测试类,在类下编写测试用例,让整体结构更加清晰一般是通过 ...

  9. 使用discover批量执行用例

    TestLaoder 该类负责根据各种条件加载测试用例,并将它们返回给测试套件,正常情况下,不需要创建这个类的实例,unittest提供了可以共享的defaultTestLoader类,可以使用其子类 ...

随机推荐

  1. iOS------App之间传递数据的几种方式

    UIDocumentInteractionController UIActivityViewController Shared Keychain Access Custom URL Scheme We ...

  2. Spring集成ElasticSearch搜索引擎

    目录 前期安装 Maven支持库安装 添加log4j的配置文件 创建Client客户端 实现增删改查以及符合查询 实现查询数据 实现添加数据 实现删除数据 实现修改数据 实现复合查询数据 Elasti ...

  3. [iOS]创建界面方法的讨论

    以前在入门的时候,找的入门书籍上编写的 demo 都是基于 Storyboards 拖界面的.后来接触公司项目,发现界面都是用纯代码去写复杂的 autoLayout 的.再然后,领导给我发了个 Mas ...

  4. HttpWebRequest 请求带OAuth2 授权的webapi

    OAuth 2.0注意事项: 1. 获取access_token时,请使用POST private static string GetAuthorization(string username, st ...

  5. NFV一种提高进程消息高可用性的方法

    1.背景及概述 1.1 背景 在做NFV的过程中,由于控制面进程被放置到不同虚拟机中,中间可能跨越路由器,因此期间网络有可能震荡,这种情况下保证高可用性就必须有保护机制,本文正是在这种背景下的考虑. ...

  6. 将 varchar 值 'ACCE5057EC423F7C' 转换成数据类型 int 时失败

    调试别人的存储过程,然后报错了 将 varchar 值 'ACCE5057EC423F7C' 转换成数据类型 int 时失败 这让我一通找.找了一个多小时. 通过这个错可以知道,错误肯定是在联表 字段 ...

  7. 洗礼灵魂,修炼python(75)--全栈项目实战篇(3)—— 账户注册登录管理系统

    要求: 1.系统可以创建用户和登录用户,根据用户的输入不同,做出不同的反应(创建还是登录) 2.创建用户不能创建已存在的用户名 3.登录用户的操作最多只能有三次,超过三次冻结账户,每使用一次提示用户还 ...

  8. C#发布和调试WebService

    一.编写并发布WebService服务 1.新建空web应用程序

  9. EOS智能合约开发(三):EOS创建和管理账号

    没有看前面文章的小伙伴可以看一下 EOS智能合约开发(一):EOS环境搭建和启动节点 EOS智能合约开发(二):EOS创建和管理钱包 创建好钱包.密钥之后,接下来你就可以创建账号了,账号是什么?账号保 ...

  10. Python爬虫之Urllib库的基本使用

    # get请求 import urllib.request response = urllib.request.urlopen("http://www.baidu.com") pr ...