app-Web/UI自动化测试框架搭建
·
1.框架搭建
app的框架搭建跟web端的搭建是一样的,首先还是不需要一步做到位,把先需要的东西写出来,流程跑通后,再去优化,补充框架搭建搭建的内容,具体过程就不详细介绍了,可以参照web自动化测试框架UI自动化测试介绍_晒不黑的黑煤球的博客-CSDN博客_ui自动化测试

2.编写自动化测试用例
根据编写的测试用例,进行代码编写,如登录功能
步骤:
- 启动app (可以放到夹具中,启动app放到前置,关闭app放到后置)
- 点击我的柠檬 id=com.lemon.lemonban:id/navigation_my
- 点击头像登录 id=com.lemon.lemonban:id/fragment_my_lemon_avatar_title
- 输入手机号码 id=com.lemon.lemonban:id/et_mobile
- 输入密码 id=com.lemon.lemonban:id/et_password
- 点击登录按钮 id=com.lemon.lemonban:id/btn_login
- 断言:手机号码格式不正确(登录失败)/登录后的头像文本=雨泽 id=com.lemon.lemonban:id/fragment_my_lemon_avatar_title(登录成功)
新建conftest.py代码如下:
import pytest
from appium.webdriver import Remote
def get_driver():
""""启动app"""
caps = {"platformName": "Android",
"udid": "emulator-5554",
"appPackage": "com.lemon.lemonban",
"appActivity": ".activity.WelcomeActivity",
"chromedriverExecutableDir": "E:\driver"
}
driver = Remote(command_executor='http://127.0.0.1:4723/wd/hub',
desired_capabilities=caps)
# 设置隐性等待
driver.implicitly_wait(10)
return driver
@pytest.fixture(name='app') # 设置别名代替init_app
def init_app():
"""启动app"""
d = get_driver()
yield d
d.quit()
新建nativepage.py代码如下:
from selenium.webdriver import ActionChains
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as when
class NativePage:
def __init__(self, driver):
self.driver = driver
def click(self, locator):
"""点击"""
wait = WebDriverWait(self.driver, timeout=5)
condition = when.element_to_be_clickable(locator)
element = wait.until(condition)
ActionChains(self.driver).click(element).perform()
def type(self, locator, words):
"""输入"""
el = self.driver.find_element(*locator)
el.send_keys(words)
def get_toast_text(self):
"""获取错误信息"""
toast = self.driver.find_element('xpath', '//android.widget.Toast')
return toast.text
def get_avatar_title(self):
"""获取登录后的头像名称"""
title = self.driver.find_element('id', 'com.lemon.lemonban:id/fragment_my_lemon_avatar_title')
return title.text
新建test_login.py代码如下:
from pages.native_page import NativePage
def test_login_failed(app):
"""登录失败"""
page = NativePage(app)
# 点击我的柠檬
locator_my = ('id', 'com.lemon.lemonban:id/navigation_my')
# 点击头像
page.click(locator_my)
locator_avatar = ('id', 'com.lemon.lemonban:id/fragment_my_lemon_avatar_title')
page.click(locator_avatar)
# 输入账号
locator_mobile = ('id', 'com.lemon.lemonban:id/et_mobile')
page.type(locator_mobile, '123')
# 输入密码
locator_pwd = ('id', 'com.lemon.lemonban:id/et_password')
page.type(locator_pwd, '123')
# 点击登录按钮
locator_login = ('id', 'com.lemon.lemonban:id/btn_login')
page.click(locator_login)
# 断言
assert page.get_toast_text() == '手机号码格式不正确'
def test_login_success(app):
"""登录成功"""
page = NativePage(app)
# 点击我的柠檬
locator_my = ('id', 'com.lemon.lemonban:id/navigation_my')
# 点击头像
page.click(locator_my)
locator_avatar = ('id', 'com.lemon.lemonban:id/fragment_my_lemon_avatar_title')
page.click(locator_avatar)
# 输入账号
locator_mobile = ('id', 'com.lemon.lemonban:id/et_mobile')
page.type(locator_mobile, '18173179913')
# 输入密码
locator_pwd = ('id', 'com.lemon.lemonban:id/et_password')
page.type(locator_pwd, '179913')
# 点击登录按钮
locator_login = ('id', 'com.lemon.lemonban:id/btn_login')
page.click(locator_login)
# 断言
assert page.get_avatar_title() == '雨泽'
新建run.py代码如下:
import pytest
pytest.main(['--alluredir=output'])
运行结果:
总结:
- 夹具可以设置别名,设置别名后调用别名即可
更多推荐

所有评论(0)