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

本文详细介绍如何将Appium与unittest结合使用,实现自动化测试的高效执行。文章讲解了unittest中Fixtures的概念,包括模块、类和用例级别的设置与清理,并通过实例展示了在测试类中配置Appium参数,实现多次测试用例的连续运行。

unittest提供的Fixtures用以在测试执行前和执行后进行必要的准备和清理工作,可以定义在模块、类、用例执行前后的工作

1、模块

在模块中定义setUpModule()和tearDownModule()处理模块执行前后的工作

def setUpModule():
    print('module start')

def tearDownModule():
    print('module end')

2、测试类

在测试类中定义setUpClass()和tearDownClass()函数处理测试类执行前的工作,setUpClass和tearDownClass的写法稍微不同:

a、需通过@classmethod进行装饰

b、方法的参数是cls,cls与self并无不同之处,只是大家都习惯了这样的命名

@classmethod   
def setUpClass(cls):
    print('Class start')
@classmethod
def tearDownClass(cls):
    print('class end')

3、测试用例

即我们前面熟悉的setUp()和tearDown()方法,每个用例执行前后都会调用

def setUp(self):
    print('test case start')
def tearDown(self):
    print('test case end')

在前面我们把Desired Capabilities 启动 session 时相关的配置放在setUp()中,把driver的退出放在tearDown()中。导致每执行一个测试用例,就需要配置连接一次移动端设备。

我们可以把相关的配置工作和清理工作放到测试类中,这样就不必每次执行一个case都重新配置和退出。比如,在计算器中,配置连接到移动端应用,连续执行加运算和减运算case,再退出。

# coding:utf-8
from appium import webdriver
import unittest, time

#模块的fixtures处理
def setUpModule(): print('module start') def tearDownModule(): print('module end') class TestFixture(unittest.TestCase):
#测试类中配置参数 @classmethod
def setUpClass(cls): print('Class start') # Desired Capabilities启动session时配置的参数 desired_caps = {} desired_caps['platformName'] = 'Android' #移动平台 desired_caps['platformVersion'] = '4.4.2' # 指定平台的系统版本 desired_caps['deviceName'] = 'Android Emulator' # 设备名称 desired_caps['appPackage'] = 'com.android.calculator2' # 包名 desired_caps['appActivity'] = '.Calculator' # launcherActivity
cls.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) # 定义webdriver对象 @classmethod def tearDownClass(cls): print('class end') cls.driver.quit() #所有用例执行完之后退出 def setUp(self): print('test case start') #用例执行前 def tearDown(self): print('test case end') #用例执行后 #加号运算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_android_uiautomator("new UiSelector().text(\"=\")").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() 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__': #构造测试集 suite = unittest.TestSuite() suite.addTest(TestFixture('test_sub')) suite.addTest(TestFixture('test_add')) #执行测试 runner = unittest.TextTestRunner() runner.run(suite)

测试输出结果如下:

module start
Class start
test case start
sub case is running
test case end
test case start
add case is running
test case end
class end
module end

可以看到,在测试机上,执行完减运算后马上执行加运算,测试用例连续执行。执行完所有的测试用例后才退出

转载请注明出处并带上原链接

转载于:https://www.cnblogs.com/fancy0158/p/10046333.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值