Тестовые автоматизации пользовательского интерфейса _08_unittest записи (+ Python Appium)

предисловие

питон UnitTest проводит рамки модульного тестирования, аналогичный JUnit (блок Java тестирования рамки). Поддержка автоматического тестирования, вы можете написать тест предварительно & постусловий, и может генерировать тестовые случаи периодического прогона и протоколы испытаний.

Используйте UnitTest темы для следующих пунктов:

1, который будет использоваться при введении UnitTest модуля

2, написать тестовый класс, и наследовать unittest.TestCase

3, название теста начинается с тестом (UnitTest будет автоматически помещен в начале испытания метод испытания случаев фокуса)

4, утверждение формата утверждение требуется UnitTest

Использование профиля

А, спереди и сзади

Передняя и задняя часть переднего и заднего класса, в зависимости от: до и после двух видов классификации множества UnitTest

Оппозитный передний и задний класс:

  • Выполнение тестов в начале класса, автоматизация приложения в основном используется для запуска приложения - класс фронта, автоматизация веб-браузера, в основном используются для запуска привода, установить максимально окно браузера, открыть URL по умолчанию: setUpClass.
  • tearDownClass: Задний класс - класс исполнение в конце теста, в основном, для закрытия приложения браузера & ответа

До и после набора функций:

  • Установка: Pre - Функции, выполняемые в начале функции тестирования, могут быть использована для записи некоторых вариантов осуществления предварительных условий (например, отчет об операции, и т.д.)
  • tesrDown: Post - Функции, выполняемые в конце функции тестирования, может быть использована для записи некоторых вариантов осуществления постусловия (например, тест инициализация данных)

Простой пример:

Примечания:

setUpClass & tearDownClass должен использовать декоратор @classmethod 

Во-вторых, тестовые записи случаев

1, тестовые примеры должны испытания в начале

2, UnitTest обычное утверждение

UnitTest обычно утверждается следующим образом:

  • не assertEqual (арг1, арг2, MSG = None): проверка параметр, равный
  • assertNotEqual (arg1, арг2, MSG = None): диапазоны параметров аутентификации
  • assertTrue (выражение, MSG = нет): проверка параметра р
  • assertFalse (выражение, MSG = нет): ложный параметр проверки
  • не assertIsNone (выражение, MSG = None): проверка параметра None
  • не assertIsNotNone (выражение, MSG = нет): Не проверочный параметр None
  • assertIn (арг1, арг2, MSG = None): Убедитесь, содержащий arg1 arg2

 Простой пример (звонкое приложение для поиска автомобиля плюс примера):

В-третьих, внедрение тестов

По unittest.main () выполнение тестов

Пример:

 В-четвертых, общий образец кода

1, детали код

# 叮咚搜索加车(appium+python+unittest)实例
from appium import webdriver
from time import sleep
import unittest

class DingDong(unittest.TestCase):
"""
叮咚买菜搜索加车
"""

@classmethod
def setUpClass(cls):
# 基础信息配置
desired_caps = {
'platformName': 'Android', # 平台
'deviceName': 'emulator-5554', # 手机设备名称
'platformVersion': '6.0.1', # 安卓系统版本号
'appPackage': 'com.yaya.zone', # apk包名
'appActivity': 'com.yaya.zone.activity.SplashActivity', # apk activity
'unicodeKeyboard': True, # 设置编码格式为unicode
'resetKeyboard': True, # 隐藏手机键盘
'noReset': True, # 非初始化
}

cls.driver = webdriver.Remote('http://0.0.0.0:4723/wd/hub', desired_caps) # 启动app
sleep(5)

def test_case01(self):
"""搜索商品加入购物车"""
self.driver.find_element_by_id("com.yaya.zone:id/ll_search").click() # 首页-点击搜索框
sleep(1)
self.driver.find_element_by_id("com.yaya.zone:id/et_what_search").send_keys("鸡腿") # 输入关键词
sleep(1)
self.driver.find_element_by_id("com.yaya.zone:id/btn_cancel").click() # 点击搜索btn
sleep(3)
product_name = self.driver.find_element_by_id("com.yaya.zone:id/tv_name").text # 搜索结果页-商品名
print("搜索结果页_商品名称:", product_name)
product_price = self.driver.find_element_by_id("com.yaya.zone:id/tv_price").text # 搜索结果页-商品价格
print("搜索结果页_商品价格:", product_price)
self.driver.find_element_by_id("com.yaya.zone:id/iv_add_cart").click() # 搜索结果页-点击加车btn
sleep(1)
self.driver.find_element_by_id("com.yaya.zone:id/iv_cart").click() # 点击购物车btn
sleep(3)
cart_product_name = self.driver.find_element_by_id("com.yaya.zone:id/tv_title").text # 购物车-商品名
print("购物车_商品名称:", cart_product_name)
cart_product_price = self.driver.find_element_by_id("com.yaya.zone:id/tv_money").text # 购物车-商品价格
print("购物车_商品价格:", cart_product_price)
self.assertEqual(cart_product_name, product_name) # 判定购物车商品名,同搜索结果页商品名
self.assertEqual(cart_product_price, product_price) # 判定购物车商品价格,同搜索结果页商品价格

def test_case02(self):
"""购物车编辑商品数量"""
cart_product_num = self.driver.find_element_by_id("com.yaya.zone:id/tv_number").text # 购物车-商品数量
print("购物车_商品数量:", cart_product_num)
self.driver.find_element_by_id("com.yaya.zone:id/btn_add").click() # 购物车-增加商品数量
after_add_num = self.driver.find_element_by_id("com.yaya.zone:id/tv_number").text # 获取增加后的商品数量
sleep(2)
self.assertEqual(int(after_add_num), int(cart_product_num)+1) # 判定商品数量
self.driver.find_element_by_id("com.yaya.zone:id/btn_sub").click() # 购物车-减少商品数量
after_reduce_num = self.driver.find_element_by_id("com.yaya.zone:id/tv_number").text # 获取减少后的商品数量
self.assertEqual(after_reduce_num, cart_product_num) # 判定商品数量

if __name__ == '__main__':
unittest.main() # 运行该文件下所有测试用例

2,运行过程,app操作详情

3,运行结果

 

 

 

 

 

 

рекомендация

отwww.cnblogs.com/mini-monkey/p/11681011.html