unittest为python语言自带的单元测试框架,python把unittest封装为一个标准模块封装在python开发包中。unittest中常用的类有:unittest.TestCase、unittest.TestSuite、unittest.TextTestRunner、test fixture

一、单元测试框架

单元测试框架并非只能用于单元测试,也可以用于编写和规范自动化测试用例。利用其组织测试用例、断言预期结果以及批量执行测试用例等功能。

单元测试框架主要功能:(源自虫师《Selenium2自动化测试实战 基于python语言》)

1、提供用例组织与执行

提供一定的规范来编写测试用例,方便扩展和维护测试用例;

2、提供丰富的比较方法

测试用例往往需要有一个实际结果和预期结果比较的过程,单元测试框架会提供丰富的断言(assert)方法,用以判断用例的执行是否通过;

3、提供丰富的日记

测试用例执行失败时能抛出失败原因,用例执行完成后提供丰富的执行结果,包括执行时间、失败用例数、成功用例数等

二、TestCase

完整的测试流程,包括测试环境的搭建、测试的执行、测试后环境的还原。

 
# coding:utf-8
from appium import webdriver
import unittest,time class TestCalculator(unittest.TestCase): # 测试前初始化配置
def setUp(self):
print('test start')
# desired capabilities以字典形式存储,客户端将键值对发给服务器端
desired_caps = {}
desired_caps['platformName'] = 'Android' # Android系统
desired_caps['platformVersion'] = '4.4.2' # 指定平台的系统版本
desired_caps['deviceName'] = 'Android Emulator' # 设备名称
desired_caps['appPackage'] = 'com.android.calculator2' # 包名
desired_caps['appActivity'] = '.Calculator' # launcherActivity
self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) #定义webdriver对象

def tearDown(self):
print('test case end')
self.driver.quit() #加号运算case
def test_add(self):
print('add case is running')
# 点击运算操作
self.driver.find_element_by_name("5").click()
self.driver.find_element_by_name("+").click()
self.driver.find_element_by_name("8").click()
self.driver.find_element_by_name("=").click()
time.sleep(2)
self.driver.find_element_by_name("CLR").click() if __name__ == '__main__':
unittest.main()
 

setUp()方法用于测试用例执行前的初始化工作,tearDown()用于测试用例执行后的善后工作。unittest中所有以test开头的函数就是测试用例,我们编写测试用例时需要以test开头。

.py文件有两种使用方式:作为模块调用和直接使用,如果它等于“__main__”表示直接使用。

三、有多个测试用例

1、多个用例

在上面基础上,我们增加一个测试用例test_sub

 
# coding:utf-8
from appium import webdriver
import unittest,time class TestCalculator(unittest.TestCase):
def setUp(self):
pass #此处省略
def tearDown(self):
print('test case end')
self.driver.quit() #加号运算case
def test_add(self):
print('add case is running')
# 点击运算操作
self.driver.find_element_by_name("1").click()
self.driver.find_element_by_name("+").click()
self.driver.find_element_by_name("8").click()
self.driver.find_element_by_name("=").click()
time.sleep(2)
self.driver.find_element_by_name("CLR").click() #减运算case
def test_sub(self):
print('sub case is running')
self.driver.find_element_by_name("9").click()
#无法通过name属性定位到'-',使用xpath定位
self.driver.find_element_by_xpath("//android.widget.Button[contains(@content-desc,'minus')]").click()
self.driver.find_element_by_name("1").click()
self.driver.find_element_by_name("=").click()
time.sleep(2)
self.driver.find_element_by_name("CLR").click()
if __name__ == '__main__':
unittest.main()
 

执行后输出结果如下:

test start
add case is running
test case end
test start
sub case is running
test case end

可知:每执行一个case,都会执行一次setUp()和tearDown()。所以可以单独封装一个测试类,用于存放这两个函数,前提是所有的测试用例所需要的setUp()和tearDown()方法都一样;

PS:测试用例的执行顺序是根据用例名按照ASCII码来排序的,与代码中case的先后顺序无关。数字和字母的顺序为:0~9,A~Z,a~z。如test_a、test_b、test_c.

2、TestSuite和TextTestRunner

TestSuite是一个测试套件,用来组装多个测试用例,可通过addTest方法把testCase添加到TestSuite中,再通过TextTestRunner对象的run()方法执行用例。

如下,现在有两个测试用例test_add和test_sub,把他们依次加入TestSuite中再执行

 
if __name__ == '__main__':
#构造测试集
suite = unittest.TestSuite()
suite.addTest(TestCalculator('test_add'))
suite.addTest(TestCalculator('test_sub'))
#执行测试
runner = unittest.TextTestRunner()
runner.run(suite)
 

使用TestSuite可以做到有选择地执行用例,不需要测试的case可以无需加入。TestSuite按照addTest()的先后顺序执行,需要先执行的case先添加到TestSuite中。

Appium+python的单元测试框架unittest(1)(转)的更多相关文章

  1. Appium+python的单元测试框架unittest(4)——断言(转)

    (原文:https://www.cnblogs.com/fancy0158/p/10051576.html) 在我们编写的测试用例中,测试步骤和预期结果是必不可少的.当我们运行测试用例时,得到一个运行 ...

  2. Appium+python的单元测试框架unittest(3)——discover(转)

    (原文:https://www.cnblogs.com/fancy0158/p/10047906.html) TestSuite套件可以添加很多个用例后运行,但是每个用例都需要调用addTest()函 ...

  3. Appium+python的单元测试框架unittest(2)——fixtures(转)

    (原文:https://www.cnblogs.com/fancy0158/p/10046333.html) unittest提供的Fixtures用以在测试执行前和执行后进行必要的准备和清理工作,可 ...

  4. python之单元测试框架—unittest

    一. 什么是单元测试?单元测试的对象是什么? 1: 什么是单元测试? 按照定义,单元测试就是对单个模块或者单个类或者单个函数进行测试,一般是开发做的,按照阶段分,一般就是单元测试.集成测试.系统测试. ...

  5. Python之单元测试框架unittest

    创建class继承unittest,每一个测试用例是以test开头的函数,先执行setup,然后用例按照字母的顺序执行,然后执行teardown import unittest class demo( ...

  6. python之单元测试框架—unittest(补充)

    一. unittest最核心的四个概念 unittest中最核心的四个概念是:test case,test suite,test runner,test fixture TestCase:一个test ...

  7. Python单元测试框架unittest之单用例管理(一)

    一.概述 本文介绍python的单元测试框架unittest,unittest原名为PyUnit,是由java的JUnit衍生而来,这是Python自带的标准模块unittest.unittest是基 ...

  8. 单元测试框架unittest

    单元测试:单元测试,是指对软件中的最小可测试单元进行检查和验证,对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义如:c语言中单元指一个函数,java里单元指一个类,图形化的软件中可以 ...

  9. Python单元测试框架unittest使用方法讲解

    这篇文章主要介绍了Python单元测试框架unittest使用方法讲解,本文讲解了unittest概述.命令行接口.测试案例自动搜索.创建测试代码.构建测试套件方法等内容,需要的朋友可以参考下   概 ...

随机推荐

  1. 手写HASHMAP

    手写HASHMAP const int MAXN=10010; const int HASH=10100;            //需要hash的数的总个数最大值 struct HASHMAP { ...

  2. eclipse导入maven工程missing artifact(实际是存在的)错误解决

    找到出错的jar包文件位置,删掉_maven.repositories文件(或用文本编辑器打开,将“>main=”改为“>=”,即删除main,当然main也可能是其他值),然后updat ...

  3. [转] pom.xml 配置详解

    From:http://blog.csdn.net/ithomer/article/details/9332071 Maven是一个项目管理工具,通过pom.xml来实现. pom.xml 配置文件 ...

  4. AOP-Advisor-笔记

    一.Advisor接口 这个接口是一个通知者的顶层接口.它实现类持有一个通知(advice)和一个过滤器的引用.用过滤器来决定通知是否合适目标对象. 这个接口只有两个方法,所以将整个代码贴上来. /* ...

  5. HtmlImageGenerator字体乱码问题解决、html2image放linux上乱码问题解决

    使用html2image-0.9.jar生成图片. 在本地window系统正常,放到服务器linux系统时候中文乱码问题.英文可以,中文乱码应该就是字体问题了. 一.首先需要在linux安装字体,si ...

  6. koa2怎么自定义一个中间件

    首先定义一个方法 function test(ctx){ global.console.log('m1') } 把这个中间件导出去 module.exports=function(){ return ...

  7. vux UI 项目国际化

    第一步必须装 vux vux-loader vuex 和vuex-i18n npm i vux-loader -D npm i vuex vux vuex-i18n -S 安装完成需要配置webpac ...

  8. 解析Array.prototype.slice.call(arguments)

    在es5标准中,我们经常需要把arguments对象转换成真正的数组 // 你可以这样写 var arr = Array.prototype.slice.call(arguments) // 你还可以 ...

  9. Docker实战(九)之数据库应用

    目前,主流数据库包括关系型和非关系型两种. 关系型数据库是建立在关系模型基础上的数据库,借助于集合代数等数学概念金额方法来处理数据库中的数据,支持复杂的事务处理和结构化查询.代表实现有MySQL .O ...

  10. 关于wordpress主题、插件上传和下载问题及其上传图片权限问题解决方案

    主题官方下载地址:https://wordpress.org/themes/ 插件官方下载地址: https://wordpress.org/plugins/ 主题的上传下载,无疑是需要ftp服务器的 ...