在执行一条自动化测试用例时需要做一些测试前的准备工作和测试后的清理工作,如:创建数据库链接、启动服务进程、打开文件、打开浏览器、测试环境的清理、关闭数据链接、关闭文件等。如果每执行一条用例都需要编写上面的代码就会造成代码的冗余,unittest包括一个特殊的hook,用来配置和清理测试所需的所有固件,可以将这些动作放在测试固件(test fixture)里。常用的测试固件方法有4个:

setUp()每个测试方法运行前执行。

tearDown()每个测试方法运行结束后运行。

setUpClass()所有的方法运行之前运行一次,整个测试类运行过程中只运行一次。

tearDownClass所有的测试方法结束之后运行以西,整个测试类运行过程中只运行一次。

 1 from appium import webdriver
2 from time import sleep
3 import unittest
4 from selenium.webdriver.support.expected_conditions import NoSuchElementException
5 from day05.email_location import EmailLocation
6
7 desired_capabilities = dict()
8 desired_capabilities["platformName"] = "Android"
9 desired_capabilities["platformVersion"] = "8.0"
10 desired_capabilities["deviceName"] = "android Emulator"
11 desired_capabilities["appPackage"] = "com.android.email"
12 desired_capabilities["appActivity"] = ".activity.setup.AccountSetupFinal"
13 desired_capabilities["newCommandTimeout"] = 200
14
15
16 class EmailTest(unittest.TestCase):
17
18 def setUp(self) -> None:
19 self.driver = webdriver.Remote("http://localhost:4723/wd/hub", desired_capabilities)
20 self.driver.implicitly_wait(20)
21 self.lct = EmailLocation()
22
23 def tearDown(self) -> None:
24 self.driver.quit()
25
26 def data(self):
27 self.data1 = {"email": "zhaodongfeng@163.com"}
28
29 def test_case01(self):
30 try:
31 email = self.driver.find_element(*self.lct.email1)
32 self.data()
33 email.send_keys(self.data1["email"])
34 sleep(1)
35 next1 = self.driver.find_element(*self.lct.next)
36 next1.click()
37 sleep(3)
38 up = self.driver.find_element(*self.lct.up)
39 up.click()
40 sleep(1)
41 manual_setup = self.driver.find_element(*self.lct.manual_setup)
42 manual_setup.click()
43 sleep(2)
44
45 except NoSuchElementException as e1:
46 print("没有找到元素", e1)
47
48 finally:
49 print("用例执行完毕")
50
51
52 if __name__ == '__main__':
53 unittest.main()

setUp()方法时在众多测试方法的每个测试方法执行前先被调用执行的方法,而且每执行完一个测试方法都要从setUp方法调用开始后再执行下一个测试方法,有几个测试方法就调用它几次,与代码位置无关,放在哪里都是它先被调用。

tearDown()方法是在众多方法执行完毕后它才被执行,不管这个类里面有多少测试方法,它是在每执行完一个测试方法后被执行的,与书写位置无关,放在哪里都行;无论测试方法是否执行成功都执行tearDown()方法,如果setUp()方法执行失败,则认为这个测试项目失败,

不会执行测试方法也不执行tearDown()方法。执行过程如下:

setUp  -->  testcase_1 -->tearDown()  -->setUp()   -->  testcase_2  -->  tearDown()

因为每执行一个测试方法都会运行setUp()和tearDown(),所以运行效率较低。可以使用setUpClass()和tearDownClass()方法,实现如下过程。

setUp  -->  testcase_1 -->  testcase_2  -->  tearDown()

 1 class CircleOperation(unittest.TestCase):
2
3 @classmethod
4 def setUpClass(cls) -> None:
5 # 启动APP
6 cls.driver = StartApp().start_wtx_oppo()
7 cls.driver.implicitly_wait(6)
8 # 登录app
9 LoginApp(cls.driver).login()
10 cls.circle_homepage_lct = CircleHomepageLocation()
11 cls.post_invitation = EditInvitationLocation()
12
13 @classmethod
14 def tearDownClass(cls) -> None:
15 # 关闭APP
16 cls.driver.quit()
17
18 def test_case1(self):
19 pass
20
21 def test_case2(self):
22 pass

setUpClass()必须使用@classmethod装饰器,所有测试方法运行前运行一次,整个测试类运行过程中只运行一次。

tearDownClass()必须使用@classmethod装饰器,所有测试方法运行完后运行一次,整个测试类运行过程中执行一次。

setUpClass()和tearDownClass()方法会增加运行效率,但是用例之间的耦合度高,case与case之间必须有上下级关系,一旦某一条case执行失败,那么所有的case都会执行失败。

在appium里的setUp或setUpClass一般包含启动app的步骤和其他初期数据和环境准备的步骤。tearDown和tearDownClass一般包含关闭App的步骤和其他数据清理和环境清理的步骤。

pyhont+unittest的测试固件的更多相关文章

  1. Unittest方法 -- 测试固件(TestFixture)

    前置和后置 1.setUp:在写测试用例的时候,每次操作其实都是基于打开浏览器输入对应网址这些操作,这个就是执行用例的前置条件.2.tearDown:执行完用例后,为了不影响下一次用例的执行,一般有个 ...

  2. python+unittest框架第三天unittest之分离测试固件和公共代码,跳过案例的执行

    我们在时间工作中,会将整个项目的代码分别放置多个模块中去编写.方便后期项目维护,比如,我们的web项目可能有多个IP地址,每个IP地址代表不同的测试环境.测试环境与Bat环境或者验收环境等.这就需要我 ...

  3. python+unittest框架第一天unittest之简单认识Test Fixure:测试固件【8月17更新】

    20万的慢慢会实现的吧,hhh unittest框架,我就不在介绍了,百度有很详细的介绍. 我们只要了解: 1.unittest是单元测试框架 2.它提供用例组织与执行:在实际工作中案例可能有上百条, ...

  4. Unittest 框架之测试固件-----(setUp与tearDown)你真的会用吗?

    前言 做自动化测试中,需要管理大量的测试用例,如果不用框架管理用例,那会是一件很麻烦的事. 如果所示只写了一个用例,内容就是输入网易邮箱账号和密码 test fixture:测试固件 简单来说就是做一 ...

  5. Python+Selenium框架 ---一个类文件多个测试方法情况下测试固件的写法

    我们测试中,肯定需要,打开一个页面,然后测试这个页面的多个用例,才关闭这个页面,去测试其他页面,在unittest是有相关测试固件方法去支持这种行为.请看下面 # coding=utf-8 impor ...

  6. python unittest自动测试框架

    编写函数或者类时进行测试,确保代码正常工作 python  unittest 模块提供了代码测试工具.按照定义测试包括两部分:管理测试依赖库的代码(称为‘固件’)和测试本身. 单元测试用于核实函数的某 ...

  7. Unittest方法 -- 测试套件

    TestSuite 测试固件 一. import unittestclass F6(unittest.TestCase): def setUp(self): pass def tearDown(sel ...

  8. unittest中的测试固件

    运行下面的两段代码,看看有什么不同? 第一段: import unittest from selenium import webdriver class F2(unittest.TestCase): ...

  9. unittest 执行测试脚本输出测试报告

    import unittestimport HTMLTestRunnertest as HTMLTestRunner#获取路径path = './'#创建测试套件,读取测试脚本suite = unit ...

随机推荐

  1. AtCoder Beginner Contest 171

    比赛链接:https://atcoder.jp/contests/abc171/tasks A - αlphabet 题意 给出一个字母,如果为大写输出 'A',如果为小写输出 'a' . 代码 #i ...

  2. 2019牛客多校 Round7

    Solved:5 Rank:296 E Find the median (线段树) 题意:最开始一个空的数组 4e5次操作 每次把Li,Ri中的每个数插入进来 问当前的中位数 题解:把这n个区间离散化 ...

  3. tomacat配置虚拟主机 && 配置缺省页面

    在conf文件夹下的server.xml文件中 在c盘建立一个sina文件夹,里面建立一个mail文件夹,在mail文件夹下面建立一个1.html网页 你配置完如果直接访问http://www.sin ...

  4. C# 之 async / await

    直接看一个例子 private async void button1_Click(object sender, EventArgs e) { var t = Task.Run(() => { T ...

  5. 使用SignTool对软件安装包进行数字签名(一)--制作证书

    一.制作根证书 1.开始菜单-运行-输入cmd,弹出命令行窗体. 2.输入命令:cd /d F:\SignTool,将当前工作目录修改到SignTool路径下. 3.使用makecert命令制作证书, ...

  6. hdu 6242 Geometry Problem

    Geometry Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Other ...

  7. js class static property & public class fields & private class fields

    js class static property class static property (public class fields) const log = console.log; class ...

  8. Azure & FaaS in Action

    Azure & FaaS in Action VSCode & Azure azure tenant select subscription Cloud Shell https://a ...

  9. github & personal access token

    github & personal access token OAuth https://github.com/xgqfrms/webtrc-in-action/issues/1#issuec ...

  10. React Hooks & React v16.8.6

    React Hooks Hooks are a new addition in React 16.8 const [state, setState] = useState(initialState); ...