python appium自动化测试框架unittest_Appium+python的单元测试框架unittest(1)(转)

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中。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值