(appium+python)UI自动化_08_unittest编写测试用例

摘要:
前言Unittest是Python附带的一个单元测试框架,类似于Junit。它支持自动化测试,可以编写测试的前-后条件,可以批量运行测试用例并生成测试报告。

前言

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:函数的后置-测试函数结束时执行,可编写一些用例后置条件(例如测试数据初始化)

简单实例:

(appium+python)UI自动化_08_unittest编写测试用例第1张

备注:

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搜索加车为实例):

(appium+python)UI自动化_08_unittest编写测试用例第2张

三、执行测试用例

通过unittest.main()执行测试用例

示例:

(appium+python)UI自动化_08_unittest编写测试用例第3张

 四、总实例代码

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操作详情

(appium+python)UI自动化_08_unittest编写测试用例第4张

3,运行结果

 (appium+python)UI自动化_08_unittest编写测试用例第5张

免责声明:文章转载自《(appium+python)UI自动化_08_unittest编写测试用例》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇一个故事告诉你比特币的原理及运作机制iOS页面间传值的方式(Delegate/NSNotification/Block/NSUserDefault/单例)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python+unittest+requests实现接口自动化的方法

前言: Requests简介 Requests 是使用Apache2 Licensed许可证的 HTTP 库。用 Python 编写,真正的为人类着想。 Python 标准库中的 urllib2 模块提供了你所需要的大多数 HTTP 功能,但是它的 API 有点落后了。它是为另一个时代、另一个互联网所创建的。它需要巨量的工作,甚至包括各种方法覆盖,来完成最...

关于面试总结12-接口自动化面试题

前言 前面总结了一篇关于接口测试的常规面试题,现在接口自动化测试用的比较多,也是被很多公司看好。那么想做接口自动化测试需要具备哪些能力呢? 也就是面试的过程中,面试官会考哪些问题,知道你是不是真的做过接口自动化测试?总的来说问的比较多的就是以下几个问题: 1.json和字典的区别? -对基础数据类型的考察 2.测试的数据你放在哪? -数据与脚本分离 3.参...

python从入门到实践第十一章练习题

'''这是11-1和11-2的练习题用于接受城市名称的函数'''"""def get_ciy_name(city,country):#定义一个城市名称的函数有2个形参 city_name = city + ',' + country return city_name.title()#把值返回给函数,用title()的方法把每个单词的第一个字母转...

selenium+python-unittest多线程生成报告(转)

前言 selenium多线程跑用例,这个前面一篇已经解决了,如何生成一个测试报告这个是难点,刚好在github上有个大神分享了BeautifulReport,完美的结合起来,就能生成报告了。 环境必备: python3.6 : BeautifulReport不支持2.7 tomorrow : pip install tomorrow安装 Beautifu...

电子商务网站中“购物车的实现原理”

购物网站一般都会用到购物车,使用中要满足的功能有: 1、用户不需要登录即可使用购物车,在没登录前操作的数据在下次登录本台机器上是有效的。 同一IP出口的多台机器,要维护各自的购物车。比如网吧,公司内网同一IP出口等情况。 解决办法: 在用户的cookie中存入不可重复码,如UUID或128位短码等,用于定位某一台机器。 当用户访问时,如果没有该唯一码,就存...

nopCommerce 4.2 小程序商城(基础版)

NOP 4.2 小程序商城(基础通用版)欢迎购买或开发定制(讨论技术,没有开发预算的勿扰,谢谢)联系我 QQ:64664795(备注:CSND) 适用对象: 小商家进行商品展示及销售 有二次开发能力的创业公司及相关企业进行二次开发,节约开发时间及成本。 基础版本功能如下: #小程序端# 商城首页:轮播图片、新品、热卖、推荐商品商品分类:商品所有分类展示...