предисловие
питон 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,运行结果