目录
前言:
本文为在霍格沃兹测试开发学社中学习到的一些技术写出来分享给大家,希望有志同道合的小伙伴可以一起交流技术,一起进步~ 😘
在我们进行自动化测试的时候,为了能够了解测试脚本运行情况,我们会对一些关键数据进行记录,如果后续运行出现问题通过这些记录会 更加方便定位。主要记录关键数据的是数段有:添加行为日志、添加截图等等。
1. 添加行为日志
- 使用 python 自带的 logging 模块
- 使用 pytest.ini 配置日志开关与格式
- 参考链接
pytest.ini 配置日志开关与格式的模板:
[pytest]
;日志开关 true false
log_cli =true
;日志级别
log_cli_level = info
;打印详细日志,相当于命令行加 -vs
addopts = --capture=no
;日志格式
log_cli_format = %(asctime)s [%(levelname)s] %(message)s (%(filename)s:%(lineno)s)
;日志时间格式
log_cli_date_format = %Y-%m-%d %H:%M:%S
;日志文件位置
log_file = ./log/test.log
;日志文件等级
log_file_level = info
;日志文件格式
log_file_format = %(asctime)s [%(levelname)s] %(message)s (%(filename)s:%(lineno)s)
;日志文件日期格式
log_file_date_format = %Y-%m-%d %H:%M:%S
2. 添加截图
方法名 | 描述 |
---|---|
get_screenshot_as_file(filename) | 保存图片为.png 格式,filename 图片路径 |
save_screenshot(filename) | 保存图片为.png 格式,filename 图片路径 |
get_screenshot_as_png() | 保存图片为二进制格式 |
get_screenshot_as_base64() | 将图片保存为 base64 格式。通常用在 html 里添加截图 |
想改写报告的话,可以把图片保存为base64的格式,然后添加在html中。
3. 获取页面源码
- 通过获取页面源码,分析页面的 dom 结构,比如toast这种短时间内就消失,无法使用工具抓取定位的情况下。
driver.page_source
4. 示例代码
4.1 示例说明
被测程序:雪球APP
测试步骤:
- 进入雪球主页
- 点击搜索框
- 输入搜索内容:alibaba
关键数据记录方式:
- 添加行为日志
- 添加截图
- 在日志中记录页面源码
4.2 添加行为日志相关配置
4.2.1 添加pytest.ini
注意:Windows系统下,ini文件中不能有中文字符;macOS和Linux可以。
没有指定日志存放路径。因为路径在manage_logs这个fixture中定义了。
[pytest]
log_cli =true
log_cli_level = info
addopts = --capture=no
log_cli_format = %(asctime)s [%(levelname)s] %(message)s (%(filename)s:%(lineno)s)
log_cli_date_format = %Y-%m-%d %H:%M:%S
log_file_level = info
log_file_format = %(asctime)s [%(levelname)s] %(message)s (%(filename)s:%(lineno)s)
log_file_date_format = %Y-%m-%d %H:%M:%S
4.2.2 添加conftest.py
在conftest.py中新增一个manage_logs的fixture,这样可以生成的日志文件名是动态的时间。
import time
import pytest
@pytest.fixture(scope="session", autouse=True)
def manage_logs(request):
"""动态生成当前时间的日志名称"""
now = time.strftime("%Y-%m-%d %H-%M-%S")
log_name = '../appiumdemo/log/' + now + '.logs'
request.config.pluginmanager.get_plugin("logging-plugin").set_log_path(log_name)
4.3 编写测试代码
import logging
from appium import webdriver
from appium.webdriver.common.mobileby import MobileBy
class TestXueQiu:
def setup(self):
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '6.0'
desired_caps['deviceName'] = '127.0.0.1:7555'
desired_caps['appPackage'] = 'com.xueqiu.android'
desired_caps['appActivity'] = '.view.WelcomeActivityAlias'
desired_caps['noReset'] = 'true'
self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
self.driver.implicitly_wait(10)
def teardown(self):
self.driver.quit()
def test_search(self):
#添加日志
logging.info("搜索用例")
element = self.driver.find_element(MobileBy.ID,"com.xueqiu.android:id/tv_search")
search_enabled = element.is_enabled()
print(f"搜索框的文本:{element.text},搜索框的坐标:{element.location},搜索框的size:{element.size}")
if search_enabled == True:
#添加日志
logging.info("点击搜索框")
element.click()
#添加日志
logging.info("输入搜索内容:alibaba")
self.driver.find_element(MobileBy.ID,"com.xueqiu.android:id/search_input_text").send_keys("alibaba")
alibaba_element = self.driver.find_element(MobileBy.XPATH, "//*[@text='阿里巴巴']")
displayed = alibaba_element.get_attribute("displayed")
logging.info(f"元素是否可见:{displayed}")
#日志中保存页面源码:一般定位问题的时候使用
logging.info("所有页面的页面源码为:"+self.driver.page_source)
#进行搜索结果截图
self.driver.save_screenshot("../appiumdemo/images/search_result.png")
assert displayed == "true"
else:
assert False
文末说明:
接口测试中我们很容易混淆Session、cookie和token,你知道他们有什么区别吗?快来跟我一起看,一篇文章让你了解三者的区别。😎
⬇⬇⬇⬇⬇⬇⬇
👍👍👍:接口测试经典面试题:Session、cookie、token有什么区别?