你可以在执行的时候增加录屏,还可以在元素定位失败的时候增加截图,这样好排查问题。
appium 里面的 start_recording_screen 和 stop_recording_screen ;每次执行用例前录屏,用例结束后结束录屏,再将录屏文件插入到 allure 里面
@pytest.fixture
def driver(cmdopt, devices):
global base_driver
global env
# 执行 runner 脚本,多条用例执行时,无需每条用例都初始化 driver,如果 driver 存在则直接使用,并且初始化录屏
if base_driver and not devices:
base_driver.start_recording_screen()
yield base_driver
time.sleep(1)
record_base64 = base_driver.stop_recording_screen()
save_record_file(record_base64, base_driver)
def save_record_file(base64_data, driver):
# 将 mp4 录屏文件存储在 static 目录,已当前时间命名
file_path, file, zip_file, file_name, output_name = get_mp4_file_info(driver)
# base64 转视频文件
logger.info("======保存录屏文件=======")
base64_to_mp4(base64_data, file)
# 压缩视频文件
ZipPictureOrVideo(file_path, file_name, output_name).compress_video()
# 视频文件添加至测试报告
logger.info("======添加视频至 allure 报告=======")
with open(zip_file, mode='rb') as f:
file = f.read()
allure.attach(file, "录屏文件", allure.attachment_type.MP4)
xpath 是自动解析的吗?我一般 xpath 都使用相对定位,自动解析 xpath 的时候也是用相对定位的方式,想保证稳定性,一些元素还是需要手动定位,通过一些不变的元素,找到相对的 xpath,才能提高稳定性。
简单的说就是,获取到 appium 的页面树,之后通过你手动定位元素过程中的总结的规律,写成通用的函数,去自动解析元素树,最后生成元素代码。跟 app 有强相关不通用。有一些局限性,主要能解决一些简单元素的封装,能节省点时间,完全自动有些苦难
再用例里面做断言
封装的断言函数里面增加 is_restart 字段,默认重启
重启使用 appium 自带的函数重启 app
重启之后,需要对 app 状态做一些判断,比如是否处于登录页面,一些权限弹窗,等
是的
appium 自带功能
allure 插件
官方哪里有说吗?可以帮忙找一下,介绍这块的地方吗?
是的,主要最开始直接在 beanshell 中实现了加密功能,最后没想到,因为 beanshell 中加密时长,随着并发的加大,逐渐增加,导致增大并发数,接口的 tps 也无法增加,影响了业务性能测试,后来改成 jar 包方式,发现性能提升许多,而且 beanshell 执行时间稳定,只是好奇中间有什么区别。
没打包之前打印的是 sign 内部的耗时,打包之后打印的是 sign 整个方法的耗时,没有在 sign 的 jar 包里面加日志
我加你吧,你发一下微信号
def wrapper_logger(func):
@wraps(func)
def wrapper(*args, **kw):
start_time = time.time()
logger.info("== method [%s] input args: [%s]====" % (func.__name__, args[1:]))
result = func(*args, **kw)
logger.info("== [%s] run time is %.3f ms =====" % (func.__name__, (time.time() - start_time)*1000))
logger.info("== method [%s] response: [%s] ====" % (func.__name__, result))
return result
return wrapper
比较简单,只是记录函数名和函数执行时间和函数返回值 日志有点乱,还可以优化
看来都是踩过坑的苦命人
是的,图像匹配,分辨率对匹配的准确性影响还是挺大的
具体指哪一方面呢 还请不吝赐教
原来如此,还没接触过游戏测试,很厉害的样子!!
图像识别主要用在无法定位的元素上面吗?现在项目中 99% 的元素都可以定位,所以就没在用图像识别,之前在原生 +h5 混合 app 中有使用过 airtest 的图像识别,感觉很不稳定
微信 8 从搜一搜里面打开也获取不到小程序?方便加微信或者 qq 沟通一下吗?
flutter 使用 appium+iOS XCUITest 框架,可以看到到元素,但是使用点击的时候获取不到,是如果在 appium 上可以看到元素,就可以使用这个元素执行吗?
driver = Remote('http://localhost:4723/wd/hub', dict(
platformName='iOS',
automationName='XCUITest',
platformVersion='13.7',
udid="00008030-000644A80285802E",
deviceName='Ly 的 iPhone',
bundleId="com.yunzhanghu.ytt4mobile",
))
driver.find_element_by_ios_predicate('value == "待装货 (7) Tab 2 of 3"').click()
Traceback (most recent call last):
File "/Users/llpan/Desktop/work/testcode/uiautotest/appium_common_utils/runner.py", line 39, in
driver.find_element_by_ios_predicate('value == "待装货 (7) Tab 2 of 3"').click()
File "/Users/llpan/Desktop/work/testcode/uiautotest/ENV/lib/python3.7/site-packages/appium/webdriver/extensions/search_context/ios.py", line 75, in find_element_by_ios_predicate
return self.find_element(by=MobileBy.IOS_PREDICATE, value=predicate_string)
File "/Users/llpan/Desktop/work/testcode/uiautotest/ENV/lib/python3.7/site-packages/appium/webdriver/webdriver.py", line 282, in find_element
return self.execute(RemoteCommand.FIND_ELEMENT, {'using': by, 'value': value})['value']
File "/Users/llpan/Desktop/work/testcode/uiautotest/ENV/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "/Users/llpan/Desktop/work/testcode/uiautotest/ENV/lib/python3.7/site-packages/appium/webdriver/errorhandler.py", line 31, in check_response
raise wde
File "/Users/llpan/Desktop/work/testcode/uiautotest/ENV/lib/python3.7/site-packages/appium/webdriver/errorhandler.py", line 26, in check_response
super().check_response(response)
File "/Users/llpan/Desktop/work/testcode/uiautotest/ENV/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: An element could not be located on the page using the given search parameters.
按照楼主方式,更新了 appium 里面的 appium-flutter-driver build 包,可以启动,但是元素抓取页面,一直在刷新,获取不到