前言
unittest是python自带的单元测试框架,类似于Junit(Java单元测试框架)。支持自动化测试,可编写测试前置&后置条件,并且可批量运行测试用例并生成测试报告。
使用unittest需遵循以下几点:
1,使用时需导入unittest模块
2,编写测试类,并继承unittest.TestCase
3,测试用例名字以test开头(unittest会自动将test开头的方法放入测试用例集中)
4,断言需用unittest断言格式
用法简介
一、前置&后置
unittest前后置分类2种:类的前后置、函数的前后置
类的前后置:
- setUpClass:类的前置-测试类开始时执行,app自动化主要用于启动app;web自动化主要用于启动浏览器驱动、设置浏览器窗口最大化、打开某默认url。
- tearDownClass:类的后置-测试类结束时执行,主要用于关闭app&浏览器回话
函数前后置:
- setUp:函数的前置-测试函数开始时执行,可编写一些用例前置条件(例如登录等操作)
- tesrDown:函数的后置-测试函数结束时执行,可编写一些用例后置条件(例如测试数据初始化)
简单实例:
备注:
setUpClass&tearDownClass必须使用装饰器@classmethod
二、编写测试用例
1,测试用例需以test开头
2,unittest常用断言
unittest常用断言如下:
- assertEqual(arg1, arg2, msg=None):验证参数相等
- assertNotEqual(arg1, arg2, msg=None) :验证参数不等
- assertTrue(expr, msg=None) :验证参数ture
- assertFalse(expr,msg=None) :验证参数false
- assertIsNone(expr, msg=None) :验证参数None
- assertIsNotNone(expr, msg=None) :验证参数非None
- assertIn(arg1, arg2, msg=None) :验证arg1包含arg2
简单实例(以叮咚app搜索加车为实例):
三、执行测试用例
通过unittest.main()执行测试用例
示例:
四、总实例代码
1,代码详情
1 # 叮咚搜索加车(appium+python+unittest)实例
2 from appium import webdriver
3 from time import sleep
4 import unittest
5
6 class DingDong(unittest.TestCase):
7 """
8 叮咚买菜搜索加车
9 """
10
11 @classmethod
12 def setUpClass(cls):
13 # 基础信息配置
14 desired_caps = {
15 'platformName': 'Android', # 平台
16 'deviceName': 'emulator-5554', # 手机设备名称
17 'platformVersion': '6.0.1', # 安卓系统版本号
18 'appPackage': 'com.yaya.zone', # apk包名
19 'appActivity': 'com.yaya.zone.activity.SplashActivity', # apk activity
20 'unicodeKeyboard': True, # 设置编码格式为unicode
21 'resetKeyboard': True, # 隐藏手机键盘
22 'noReset': True, # 非初始化
23 }
24
25 cls.driver = webdriver.Remote('http://0.0.0.0:4723/wd/hub', desired_caps) # 启动app
26 sleep(5)
27
28 def test_case01(self):
29 """搜索商品加入购物车"""
30 self.driver.find_element_by_id("com.yaya.zone:id/ll_search").click() # 首页-点击搜索框
31 sleep(1)
32 self.driver.find_element_by_id("com.yaya.zone:id/et_what_search").send_keys("鸡腿") # 输入关键词
33 sleep(1)
34 self.driver.find_element_by_id("com.yaya.zone:id/btn_cancel").click() # 点击搜索btn
35 sleep(3)
36 product_name = self.driver.find_element_by_id("com.yaya.zone:id/tv_name").text # 搜索结果页-商品名
37 print("搜索结果页_商品名称:", product_name)
38 product_price = self.driver.find_element_by_id("com.yaya.zone:id/tv_price").text # 搜索结果页-商品价格
39 print("搜索结果页_商品价格:", product_price)
40 self.driver.find_element_by_id("com.yaya.zone:id/iv_add_cart").click() # 搜索结果页-点击加车btn
41 sleep(1)
42 self.driver.find_element_by_id("com.yaya.zone:id/iv_cart").click() # 点击购物车btn
43 sleep(3)
44 cart_product_name = self.driver.find_element_by_id("com.yaya.zone:id/tv_title").text # 购物车-商品名
45 print("购物车_商品名称:", cart_product_name)
46 cart_product_price = self.driver.find_element_by_id("com.yaya.zone:id/tv_money").text # 购物车-商品价格
47 print("购物车_商品价格:", cart_product_price)
48 self.assertEqual(cart_product_name, product_name) # 判定购物车商品名,同搜索结果页商品名
49 self.assertEqual(cart_product_price, product_price) # 判定购物车商品价格,同搜索结果页商品价格
50
51 def test_case02(self):
52 """购物车编辑商品数量"""
53 cart_product_num = self.driver.find_element_by_id("com.yaya.zone:id/tv_number").text # 购物车-商品数量
54 print("购物车_商品数量:", cart_product_num)
55 self.driver.find_element_by_id("com.yaya.zone:id/btn_add").click() # 购物车-增加商品数量
56 after_add_num = self.driver.find_element_by_id("com.yaya.zone:id/tv_number").text # 获取增加后的商品数量
57 sleep(2)
58 self.assertEqual(int(after_add_num), int(cart_product_num)+1) # 判定商品数量
59 self.driver.find_element_by_id("com.yaya.zone:id/btn_sub").click() # 购物车-减少商品数量
60 after_reduce_num = self.driver.find_element_by_id("com.yaya.zone:id/tv_number").text # 获取减少后的商品数量
61 self.assertEqual(after_reduce_num, cart_product_num) # 判定商品数量
62
63 if __name__ == '__main__':
64 unittest.main() # 运行该文件下所有测试用例
2,运行过程,app操作详情
3,运行结果
来源:oschina
链接:https://my.oschina.net/u/4325773/blog/3339419