zoukankan      html  css  js  c++  java
  • (appium+python)UI自动化_08_unittest编写测试用例

    前言

    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,运行结果

     

  • 相关阅读:
    在WPF中应用弱事件模式
    MSTest DeploymentItemAttribute
    delegate, event
    zookeeper 开机启动197
    centos 7 安装solr7.3.0 配置mysql197
    solr7.4 centos7安装197
    centos 查看mysql数据库命令197
    bootstrapValidator验证197
    idea快捷键197
    sun.misc.Unsafe.park(Native Method)197
  • 原文地址:https://www.cnblogs.com/mini-monkey/p/11681011.html
Copyright © 2011-2022 走看看