一、unittest重要概念

4个重要概念:
test fixture、test case、test suite和test runner。

1.Test Case
一个TestCase的实例就是一个测试用例。就是一个完整的测试流程,包括测试前准备环境的搭建(setUp)、实现测试过程的代码(run),以及测试后环境的还原(tearDown)。

2.Test Suite
一个功能的验证往往需要多个测试用例,可以把多个测试用例集合在一起来执行,这就产生了测试套件TestSuite的概念。TestSuite用来组装单个测试用例。可以通过addTest加载TestCase到TestSuite中,从而返回一个Testsuite实例。

3.Test Runner
测试的执行也是单元测试中非常重要的一个概念,一般单元测试框架中都会提供丰富的执行策略和执行结果。在unittest单元测试框架中,通过TextTestRunner类提供的run()方法来执行test suite/test case。Test runner可以使用图形界面,文本界面,或返回一个特殊的值等方式来表示测试执行的结果。

4.Test Fixture
对一个测试用例环境的搭建和销毁,就是一个fixture,通过覆盖TestCase的setUp()和tearDown()方法来实现。比如:在这个测试用例中需要访问数据库,那么可以在setUp()中通过建立数据库连接来进行初始化,在tearDown()中清除数据库产生的数据,然后关闭连接等。

注意:tearDown的过程很重要,要为下一个test case留下一个干净的环境。

#coding:utf-8

from Demo1 import Count
import unittest #测试两个整数相加
class TestCount(unittest.TestCase): def setUp(self):
print "test start" def test_sum(self):
j=Count(2,3).sum()
self.assertEqual(j,5) def test_sum2(self):
j=Count def tearDown(self):
print "test Down" if __name__=='__main__':
#构造测试集
suite=unittest.TestSuite()
suite.addTest(TestCount("test_sum2")) #执行测试
runner=unittest.TextTestRunner()
runner.run(suite)

在前面例子的基础上编写了第二个测试用例test_sum2()。由于第一个测试用例已经运行通过,因此只需要运行第二条测试用例。在代码的最后,我们去掉了main()方法,采用构造测试集的方法来加载与运行测试用例,实现了有选择地执行测试用例。
首先,调用unittest框架的TestSuite()类来创建测试套件,通过它所提供的addTest()方法来添加测试用例test_sum2()。接着调用unittest框架的TextTestRunner()类,通过它下面的run()方法来运行suite所组装的测试用例。
从执行结果看,setUp/tearDown作用于测试用例的开始与结束。

Selenium 2自动化测试实战27(unittest重要概念,test fixture、test case、test suite和test runne)的更多相关文章

  1. Selenium 2自动化测试实战

    Selenium 2自动化测试实战 百度网盘 链接:https://pan.baidu.com/s/1aiP3d8Y1QlcHD3fAlEj4sg 提取码:jp8e 复制这段内容后打开百度网盘手机Ap ...

  2. Selenium 2自动化测试实战3(函数、类和方法)

    一.函数.类和方法1.函数在python中通过def关键字来定义函数 创建一个add()函数,此函数接收两个参数a,b,通过print()打印a+b的结果.调用add()函数,并且上传两个参数3,5给 ...

  3. 《Selenium 2自动化测试实战 基于Python语言》中发送最新邮件无内容问题的解决方法

    虫师的<Selenium 2自动化测试实战 基于Python语言>是我自动化测试的启蒙书 也是我推荐的自动化测试入门必备书,但是书中有一处明显的错误,会误导很多读者,这处错误就是第8章自动 ...

  4. Selenium 2自动化测试实战33(带unittest的脚本分析)

    带unittest的脚本分析 #test.py #coding:utf-8 from selenium import webdriver from selenium.webdriver.common. ...

  5. Selenium 2自动化测试实战30(unittest补充)

    unittest补充 1.用例执行的顺序 #test.py #coding:utf-8 from Demo1 import Count import unittest class TestBdd(un ...

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

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

  7. Selenium 与自动化测试 —— 《Selenium 2 自动化测试实战》读书笔记

    背景 最近在弄 appium,然后顺便发现了 Selenium 框架和这本书,恰好这本书也介绍了一些软件测试&自动化测试的理论知识,遂拿过来学习学习.所以本文几乎没有实践内容,大多都是概念和工 ...

  8. Selenium+Python自动化测试实战(2)元素定位

    1.Selenium2 的原理 第一篇分享简单介绍了基于Python开发的Selenium2的环境配置,这篇主要讲一下基本用法.首先讲一下Selenium2的基本原理.基本上知道了这个东西是怎么回事, ...

  9. Selenium 2自动化测试实战35(HTML测试报告)

    HTML测试报告 显然,一份漂亮的测试报告展示自动化测试成果只有一个简单的log文件是不够的.HTMLTestRunner是python标准库unittest单元测试框架的一个扩展,它生成易于使用的H ...

随机推荐

  1. Java 基本的数据类型(8种)

    1.Java 基本的数据类型(8种) 整型:byte .short .int .long 浮点型:float .double 字符型:char 布尔型:boolean

  2. python面向对象基础(三)内置方法 __xx__

    __str__和__repr__,__format__ 改变对象的字符串显示__str__,__repr__ 自定制格式化字符串__format__ #_*_coding:utf-8_*_ forma ...

  3. php类知识---最疯狂的魔术方法serialize,_sleep,__wakeup,unserialize,__autoload,__clone

    serialize-----把实例化的对象写入文件 __sleep 调用serialize时触发 <?php class mycoach { public function __construc ...

  4. 题解 【NOIP2010】关押罪犯

    [NOIP2010]关押罪犯 Description S城现有两座监狱,一共关押着N名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突 ...

  5. jenkins汉化

    插件: Localization: Chinese (Simplified) locale plugin(或者是这个版本不一样,名字不一样) 可以直接安装这个插件,然后走最后一步设置即可. 由于安装失 ...

  6. JavaScript 小技巧整理

    1.过滤唯一值 Set类型是在ES6中新增的,它类似于数组,但是成员的值都是唯一的,没有重复的值.结合扩展运算符(...)我们可以创建一个新的数组,达到过滤原数组重复值的功能. const array ...

  7. TTTTTTTTTTTTTTTTTT CodeForces 589A Email Aliases 字符串 map

    A - Email Aliases Time Limit:2000MS     Memory Limit:524288KB     64bit IO Format:%I64d & %I64u ...

  8. sh_17_字符串的查找和替换

    sh_17_字符串的查找和替换 hello_str = "hello world" # 1. 判断是否以指定字符串开始 print(hello_str.startswith(&qu ...

  9. sh_14_字符串定义和遍历

    sh_14_字符串定义和遍历 str1 = "hello python" str2 = '我的外号是"大西瓜"' print(str2) print(str1[ ...

  10. go之流程控制

    一.与用户交互 var name string fmt.Scanln(&name) # 一定得传指针,因为我要修改的是name的值 fmt.Println(name) 二.if判断 1.if ...