Pytest测试框架的基本使用和allure测试报告
一、测试用例的识别与运行
目录识别
通过pytest.ini配置文件配置
- 如果未指定任何参数,则收集从testpaths(如已配置)或当前目录开始。另外,命令行参数可以在目录、文件名或节点ID的任何组合中使用。
- 递归到目录,除非它们匹配norecursedirs,排除目录搜索
文件识别
- 在这些目录中,搜索 test_*.py 或 *_test.py 文件
用例识别
- Test*类包含的所有test_ * 的方法(测试类不能带有__init__方法)
- 不在类中的所有test_*方法
pytest也可以执行unittest框架写的用例和方法
运行方式
- pycharm界面运行
修改默认的测试运行方式
- 右键 文件/ 目录 运行
- 使用命令行方式运行
二、常用的命令行参数
-k 字符串表达式: 只运行与给定字符串表达式匹配的测试用例,示例:-k "add":匹配所有名称中包含add的用例('add or div' 'TestClass')
-m mark标签名:只运行被标记的测试用例
-s:显示标准输出
-v:显示详细报告
-q:显示简介报告
-x:用例失败时立即停止测试
--maxfail=n: 失败n次后停止运行测试
--lf(--last-failed): 仅执行上次失败的用例(有失败的用例或者没找到缓存文件,默认是运行所有的用例)
--lfnf=[all,none]: 与--if同时使用, =all 表示找不到用例或缓存文件时执行所有用例,=none 表示找不到用例或者缓存文件时不执行测试用例。示例:pytest --lf --lfnf=none
--ff(--failed-first): 先执行失败的用例,再执行其它用例
--nf(--new-first): 首先从新文件或新修改的用例开始运行测试
--sw(--stepwise): 在测试失败时退出,且下一次在测试失败的用例开始测试
--stepwise-skip :忽略第一个失败的测试,在第二次测试失败时退出
--keep-duplicates : 不断重复的测试
--durations=n :显示执行最慢的n条用例
-strict: 禁止使用未在配置文件(pytest.ini)注册的 mark 标记
-c file: 从file加载配置文件
--collect-only:只收集用例
--junitxml=./result.xml:生成执行结果文件
--setup-show:回溯fixture的执行过程
--cache-clear :运行前清除pytest缓存更多的用法使用pytest —help查看帮助文档
usage: pytest [options] [file_or_dir] [file_or_dir] [...]positional arguments:file_or_dir通用:-k EXPRESSION 只运行与给定子字符串表达式匹配的测试用例。表达式是一个 python 可计算表达式,其中所有名称都与测试名称及其父类进行子字符串匹配。例如:-k 'test_method or test_other'匹配所有名称包含'test _ method'或'test_other'的测试函数和类的测试方法,而-k 'not test_method'匹配那些不包含的测试函数和类的测试方法。-k 'not test_method and not test_other'匹配不包含'test_method'和'test_other'的测试函数和类的测试方法。此外,关键字匹配的类和函数包含额外的名称在他们的额外关键字匹配集,以及函数的名称直接分配给他们。匹配不区分大小写。-m MARKEXPR 只运行匹配给定标记的测试函数和类。例如: -m 'mark1 and not mark2'.--markers 显示标记(内置的、插件的和每个项目的)。-x, --exitfirst 在第一个错误或测试失败时立即退出。--fixtures,--funcargs 显示可用的fixture,按插件外观排序(带'_'的fixture仅以“-v”显示)--fixtures-per-test 显示每个测试用例的fixture--pdb 在出现错误或键盘中断时启动交互式Python调试器。--pdbcls=modulename:classname在出现错误时启动自定义交互式Python调试器。例如:--pdbcls=IPython.terminal.debugger:TerminalPdb--trace 运行每个测试时立即中断。--capture=method 每个用例捕获信息的方法: fd(文件描述符,默认)|sys(系统标准的错误输出)|no(显示打印信息)|tee-sys.-s 等价于--capture=no,显示打印信息--runxfail 强制运行xfail标记的test--lf, --last-failed 只重新运行在上次运行中失败的测试(如果没有失败,则重新运行所有测试)--ff, --failed-first 运行所有的测试,但是先运行上一次运行失败的测试。这可能会导致测试的重新排序,因此导致重复fixture中的setup/teardown。--nf, --new-first 先从新文件开始测试,然后剩下的测试按照文件时间排序。--cache-show=[CACHESHOW]显示缓存内容,不执行收集或测试。可选参数:glob(默认值:“*”)。--cache-clear 在测试运行开始时删除所有缓存内容。--lfnf={all,none}, --last-failed-no-failures={all,none}与--lf同时使用, =all 表示找不到用例或缓存文件时执行所有用例,=none 表示找不到用例或者缓存文件时不执行测试用例。示例:pytest --lf --lfnf=none--sw, --stepwise 在测试失败时退出,且下一次在测试失败的用例开始测试。--sw-skip, --stepwise-skip忽略第一个失败的测试,但在下一个失败的测试中停止--allure-severities=SEVERITIES_SET以逗号分隔的严重性名称列表。将只运行具有这些严重性的测试用例。严重等级名称有: blocker, critical, normal, minor, trivial.--allure-epics=EPICS_SET以逗号分隔的episc(史诗)名字列表。运行至少具有一个指定epics标签的测试。--allure-features=FEATURES_SET以逗号分隔的feature名称列表。运行至少具有一个指定feature标签的测试。--allure-stories=STORIES_SET以逗号分隔的story名称列表。运行至少具有一个指定story标签的测试。--allure-ids=IDS_SET 以逗号分隔的IDS列表。运行至少具有一个指定ids标签的测试。--allure-link-pattern=LINK_TYPE:LINK_PATTERN链接类型的Url模式。 在测试中允许短链接,比如'issue-1'。文本将通过str.format()被格式化为完整的网址。报告:--durations=N 显示N个最慢的用例,每个用例运行的时间 (N=0 显示每个用例运行的时间).--durations-min=N 包含在最慢列表中的最小持续时间(以秒为单位)。默认值为0.005s-v, --verbose 输出详细信息--no-header 禁用(不显示)标题--no-summary 禁用(不显示)摘要-q, --quiet 输出简要信息--verbosity=VERBOSE 设置信息显示等级. 默认是0.-r chars 显示由chars指定的额外测试摘要信息: (f)ailed, (E)rror, (s)kipped, (x)failed,(X)passed, (p)assed, (P)assed with output, (a)ll except passed (p/P), or (A)ll. (w)arnings areenabled by default (see --disable-warnings), 'N' can be used to reset the list. (default: 'fE').--disable-warnings, --disable-pytest-warnings禁用警告摘要-l, --showlocals 在 tracebacks 中显示局部变量,默认不显示--tb=style traceback 打印模式 (auto/long/short/line/native/no).--show-capture={no,stdout,stderr,log,all}控制在失败的测试中如何显示捕获错误信息,捕获方式有:stdout/stderr/log。默认值为“all”。--full-trace 不截取 traceback,默认会截断--color=color 彩色终端输出(yes/no/auto).--code-highlight={yes,no}是否应突出显示代码 (仅当 --color 被启用时有作用)--pastebin=mode 发送 failed|all 信息到 bpaste.net pastebin 服务.--junit-xml=path 创建 junit-xml 风格的测试报告,path指定报告生成的路径--junit-prefix=str junit-xml 输出中的 classnames 添加前缀,str指定前缀pytest警告:-W PYTHONWARNINGS, --pythonwarnings=PYTHONWARNINGS设置要报告的警告,请参见python本身的-W选项。--maxfail=num 第num次失败或错误后退出,num指定次数--strict-config 分析配置文件(pytest.ini)的“pytest”部分时遇到的任何警告都会引发错误。--strict-markers 未在配置文件(pytest.ini)的“markers”部分注册的标记将引发错误。-c file 从file文件中加载配置--continue-on-collection-errors即使发生收集用例错误,也强制执行测试。--rootdir=ROOTDIR 定义测试的根目录。可以是相对路径: 'root_dir', './root_dir','root_dir/another_dir/';绝对路径: '/home/user/root_dir'; 带变量的路径:'$HOME/root_dir'.收集:--collect-only, --co 只收集,不执行。可以用来统计写了多少条自动化用例--pyargs 尝试将所有参数解释为python包。--ignore=path 收集期间忽略路径(允许多个,多个path用逗号隔开)。--ignore-glob=path 在收集期间忽略路径的匹配(允许多个,用逗号分隔)。示例:pytest --ignore-glob="*_01.py"--deselect=nodeid_prefix通过 node id prefix 反选。可以多个 (逗号隔开)示例:pytest --deselect="tests/foobar/test_foobar_01.py::test_a"--confcutdir=dir 仅加载相对于指定目录的conftest.py。--noconftest 不加载任何conftest.py文件。--keep-duplicates 不断重复的测试--collect-in-virtualenv收集本地虚拟环境目录的测试用例测试session调试和配置:--basetemp=dir 此测试运行的base临时目录。(警告:如果此目录存在,将被删除)-V, --version 显示pytest 版本-h, --help 显示pytest 帮助信息-p name 提前加载给定的插件模块名或入口点(允许多个)。为了避免加载插件,请使用'no:'前缀,例如'no:doctest'。--trace-config 查看本地安装好的第三方插件--debug 将内部跟踪调试信息存储在“pytestdebug.log”中。-o OVERRIDE_INI, --override-ini=OVERRIDE_INI覆盖 ini 文件配置示例:pytest -o xfail_strict=True -o cache_dir=cache--assert=MODE 控件断言调试工具模式:'plain':不执行断言调试。'rewrite' :(默认)在导入时重写测试模块中的assert语句以提供assert表达式信息。--setup-only 只 setup fixtures,不执行测试--setup-show 执行 tests 的时候显示 fixture setup--setup-plan 显示 fixtures 和 tests 计划会执行什么,但是不执行也可以用来统计自动化用例日志:
推荐直接使用loguru第三方库,安装:pip install loguru--log-level=LEVEL 要捕获/显示的日志消息的级别。默认情况下不设置,因此它取决于根/父日志处理程序的有效级别,默认为“警告”。--log-format=LOG_FORMAT日志模块使用的日志格式。示例:pytest --log-format="%(asctime)s %(levelname)s %(message)s"--log-date-format=LOG_DATE_FORMAT日志模块使用的日志日期格式。示例:pytest --log-date-format="%Y-%m-%d %H:%M:%S"--log-cli-level=LOG_CLI_LEVELcli日志记录级别--log-cli-format=LOG_CLI_FORMATcli日志格式--log-cli-date-format=LOG_CLI_DATE_FORMATcli 日志日期格式--log-file=LOG_FILE 日志记录将写入的文件路径--log-file-level=LOG_FILE_LEVEL日志文件日志记录级别--log-file-format=LOG_FILE_FORMAT日志文件日志记录格式--log-file-date-format=LOG_FILE_DATE_FORMAT日志文件日志的日期格式--log-auto-indent=LOG_AUTO_INDENT日志的自动缩进接受 true|on、false|off 或整数。allure测试报告:--alluredir=DIR allure 数据生成的目录, json格式的数据--clean-alluredir 清空alluredir目录下的数据--allure-no-capture 报告不捕获 pytest 的 logging/stdout/stderr 信息自定义选项:--tavern-global-cfg=TAVERN_GLOBAL_CFG [TAVERN_GLOBAL_CFG ...]要包含在每个测试中的一个或多个全局配置文件--tavern-http-backend=TAVERN_HTTP_BACKEND要使用哪个http后端--tavern-mqtt-backend=TAVERN_MQTT_BACKEND要使用哪个mqtt后端--tavern-strict={json,headers,redirect_query_params} [{json,headers,redirect_query_params} ...]默认响应匹配严格性--tavern-use-default-traceback使用普通python风格的 traceback--tavern-always-follow-redirects始终遵循HTTP重定向--tavern-file-path-regex=TAVERN_FILE_PATH_REGEXRegex to search for Tavern YAML test files--tavern-merge-ext-function-values在http请求中合并来自外部函数的值[pytest] pytest.ini|tox.ini|setup.cfg 配置文件选项:markers (linelist): 自定义makerempty_parameter_set_mark (string):空参数集的默认标记默认情况下,如果@pytest.mark.parametrize的argnames中的参数没有接收到任何的实参的话,用例的结果将会被置为SKIPPED;empty_parameter_set_mark 可以设置为 skip、xfail、fail_at_collect。norecursedirs (args): 忽略一些目录,不去搜索用例testpaths (args): 在命令行中没有给定文件或目录时,搜索指定目录测试用例。filterwarnings (linelist):每行指定一个warnings.filterwarnings模式。usefixtures (args): 此项目默认使用的 fixturespython_files (args): 自定义测试文件命名规则python_classes (args):自定义测试类命名规则python_functions (args):自定义测试方法命名规则disable_test_id_escaping_and_forfeit_all_rights_to_community_support (bool):禁用字符串转义非ascii字符,可能会导致不必要的副作用(自行使用风险)console_output_style (string):控制台输出样式:classic 经典样式progress: 带进度百分比count 计数而不是百分比xfail_strict (bool): 默认 false,true 时@pytest.mark.xfail的 test,会被强制失败,即使是成功的。enable_assertion_pass_hook (bool):启用 pytest_assertion_pass 钩子函数确保删除之前生成的 pyc 缓存文件。cache_dir (string): 缓存目录路径log_level (string): 日志等级log_format (string): 日志格式log_date_format (string):日志日期格式log_cli (bool): 在测试运行期间启用日志显示,实时显示日志。log_cli_level (string):cli 日志等级log_cli_format (string):cli 日志格式log_cli_date_format (string):cli 日志日期格式log_file (string): 日志文件路径log_file_level (string):日志文件等级log_file_format (string):日志文件格式log_file_date_format (string):日志文件日期格式log_auto_indent (string):日志自动缩进faulthandler_timeout (string):如果 test 的运行时间超过设定的时间(超时),会打印相关 traceback。addopts (args): 执行时带的默认参数,可以避免每次都要输入一遍示例:addopts = -rsxX -v --reruns=1 --count=2minversion (string): pytest 最小版本号。如果 pytest 低于这个版本,运行会报错。required_plugins (args):必须存在的插件才能运行pytesttavern-global-cfg (linelist):要包含在每个测试中的一个或多个全局配置文件tavern-http-backend (string):要使用哪个http后端tavern-mqtt-backend (string):要使用哪个mqtt后端tavern-strict (args): 默认响应匹配严格性tavern-use-default-traceback (bool):使用普通python风格的 tracebacktavern-always-follow-redirects (bool):始终遵循HTTP重定向tavern-file-path-regex (args):Regex to search for Tavern YAML test filestavern-merge-ext-function-values (bool):在http请求中合并来自外部函数的值环境变量:PYTEST_ADDOPTS 额外的命令行选项PYTEST_PLUGINS 包含应作为插件加载的以逗号分隔的模块列表PYTEST_DISABLE_PLUGIN_AUTOLOAD 禁用插件自动加载PYTEST_DEBUG 启用 pytest 调试查看可用的标记: pytest --markers
查看可用的fixture: pytest --fixtures
三、框架结构
测试用例资源的构建和释放
- 模块级(setup_module/teardown_module)模块始末,全局的(优先最高)
- 函数级(setup_function/teardown_function)只对函数用例生效(不在类中)
- 类级(setup_class/teardown_class)只在类中前后运行一次(在类中)
- 方法级(setup_method/teardown_methond)开始于方法始末(在类中)
- 类里面的(setup/teardown)运行在调用方法的前后
四、参数化的使用
@pytest.mark.parametrize(argnames, argvalues)
- argnames:要参数化的变量,string(逗号分割), list, tuple
- argvalues:参数化的值,list[tuple],每一个元组都是一条测试用例的测试数据
- ids:默认None,用来重新定义测试用例的名称
# 使用string分割参数化的变量
@pytest.mark.parametrize('a,b',[(10,20),(30,40)])
def test_param(a, b):print(a,b)# 使用list分割参数化的变量
@pytest.mark.parametrize(['a', 'b'],[(10,20),(30,40)])
def test_param(a, b):print(a,b)# 使用tuple分割参数化的变量
@pytest.mark.parametrize(('a', 'b'),[(10,20),(30,40)])
def test_param(a, b):print(a,b)# 使用ids重新定义用例名称
@pytest.mark.parametrize('a,b',[(10,20),(30,40)], ids=['case1', 'case2'])
def test_param(a, b):print(a,b)
yaml数据参数化
安装
pip install PyYAML
yaml实现列表list:
- 10
- 20
- 30
yaml实现字典:
by: id
locator: name
action: click
yaml进行嵌套:二维数组
[[{'by': 'id'}], ['locator': 'name'], ['action': 'click']]
- - by: id- locator: name- action: click
{'companies': [{'id': 1, 'name': 'company1', 'price': '200w'}, {'id': 2, 'name': 'company2', 'price': '500w'}], 'fruites': [{'name': '苹果', 'price': 8.6}, {'name': '香蕉', 'price': 2.6}]}
companies:- id: 1name: company1price: 200w- id: 2name: company2price: 500w
fruites:- name: 苹果price: 8.6- name: 香蕉price: 2.6
from os.path import exists
from yaml import safe_load_all, safe_loadclass FileBase:def __init__(self, file_path: str):if not exists(file_path):raise FileNotFoundError(f'找不到文件:{file_path}')self._file_path = file_pathself._data = Noneclass YmlReader(FileBase):def __init__(self, yml_path: str, multi: bool = False):"""yml文件读取:param yml_path: 文件路径:param multi: 是否多节读取,yml文件通过'---'符号进行多节处理"""super(YmlReader, self).__init__(yml_path)self._multi = multi@propertydef data(self):# 第一次获取数据才进行数据的读取if not self._data:with open(self._file_path, 'rb') as f:if self._multi:self._data = list(safe_load_all(f))else:self._data = safe_load(f)return self._data# 数据yml参数化使用
@pytest.mark.parametrize('a,b',YmlReader('./nums.yml').data)
def test_param(a, b):print(a,b)
五、测试报告美化(Allure测试框架)
5.1、allure安装(windows)
官网: http://allure.qatools.ru/
下载地址:https://github.com/allure-framework/allure2/releases
解压 -> 把bin目录加入PATH环境变量中
检查安装:配置完成后,cmd打开DOS命令行窗口,输入allure
5.2、报告生成
安装allure-pytest插件
pip install allure-pytest
运行测试用例
查看pytest中allure有关的命令行参数
C:\Users\Administrator>pytest --help | findstr allure <== linux 使用grep过滤--allure-severities=SEVERITIES_SET <== 根据用例级别过滤需要执行的用例--allure-epics=EPICS_SET --allure-features=FEATURES_SET <== 根据用例设置的feature名称过滤需要执行的用例--allure-stories=STORIES_SET <== 根据用例设置的story名称过滤需要执行的用例--allure-ids=IDS_SET Comma-separated list of IDs.--allure-link-pattern=LINK_TYPE:LINK_PATTERN--alluredir=DIR <== 指定存放用例执行结果的目录--clean-alluredir 清除alluredir文件夹(如果存在)--allure-no-capture Do not attach pytest captured logging/stdout/stderr to
在测试执行期间收集结果
# --alluredir: 用于指定存储测试结果的路径
pytest [测试文件] -vs --alluredir=./result/ --clean-alluredir
查看测试报告
方式一:测试完成后查看实际报告,在线看报告,会直接打开默认浏览器展示当前报告
# 注意这里的serve书写,后面接用例执行结果(./result/:就是存放执行结果的目录路径)
allure serve ./result/
方式二:从结果生成报告,这是一个启动tomcat的服务,需要两个步骤:
生成报告
# 注意:覆盖路径加--clean allure generate ./result/ -o ./report/ --clean
打开报告
allure open -h 127.0.0.1 -p 8883 ./report/
5.3、常用的特性
希望在报告中看到测试功能、子功能或场景、测试步骤和测试附加信息等,可以通过@feature、@story、@step和@attach等装饰器实现。
实现的步骤:
import allure
功能上加@allure.feature(‘功能名称’)
子功能上加@allure.story(‘子功能名称’)
用例标题@allure.title(‘用例名称’)
用例描述@allure.description(‘用例描述’)
步骤上加@allure.step(‘步骤细节’)
@allure.attach(‘具体文本信息’),需要附加的信息,可以是数据、文本、图片、视频和网页
用例级别@allure.severity(级别)
如果只测试登录功能运行的时候可以加限制过滤
# 注意这里--allure-features中间是-中线, 需要使用双引号 # 不能过滤--allure-features下的--allure-stories pytest 文件名 --allure-features="登录模块"
allure特性-feature/story
注解@allure.feature 与 @allure.story的关系
- feature相当于一个功能,一个大的模块,将case分类到某个feature中,报告中Behaviors(功能)中显示,相当于testsuite
- story相当于对应这个功能或者模块下的不同场景,分支功能,属于feature之下的结构,报告中features中显示,相当于testcase
- feature与story类似于父子关系
allure特性-step
- 测试过程中每个步骤,一般放在具体【逻辑方法】中
- 可以放在关键步骤中,在报告中显示
- 在app、web自动化测试当中,建议每切换到一个新的页面当做一个step
用法
- @allure.step():只能以装饰器的形式放在类或方法上面
- with allure.step():可以放在测试用例方法里面,但测试步骤的代码需要被该语句包含
allure特性-testcase
关联测试用例,可以直接给测试用例的地址链接,一般用于关联手工测试案例。
示例代码
import pytest
import allure@allure.feature('用户登录')
class TestLogin:@allure.story('登录成功')def test_login_success(self):with allure.step('步骤1:打开应用'):print('打开应用')with allure.step('步骤2:进入登录页面'):print('进入登录页面')with allure.step('步骤3:输入用户名和密码'):print('输入用户名和密码')print('这是登录成功测试用例')@allure.story('登录失败')def test_login_fail(self):print('这是登录失败测试用例')@allure.story('登录失败')@allure.title('用户名缺失')def test_login_fail_a(self):print('这是登录失败测试用例')@allure.story('登录失败')@allure.testcase('https://www.baidu.com/', '关联测试用例地址')@allure.title('密码缺失')@allure.description('这是一个用例描述信息')def test_login_fail_b(self):with allure.step('点击用户名'):print('输入用户名')with allure.step('点击密码'):print('输入密码')print('点击登录')with allure.step('点击登录之后登录失败'):assert '1' == 1
按重要性级别进行一定范围测试
通常测试有PO、冒烟测试、验证上线测试。按重要性级别来分别执行,比如上线要把主流程和重要模块都跑一遍。
缺陷严重级别:
1. Blocker级别——中断缺陷客户端程序无响应,无法执行下一步操作。
2. Critical级别――临界缺陷,包括:功能点缺失,客户端爆页。
3. Major级别——较严重缺陷,包括:功能点没有满足需求。
4. Normal级别――普通缺陷,包括:1. 数值计算错误2. JavaScript错误。
5. Minor级别———次要缺陷,包括:1. 界面错误与UI需求不符。2. 打印内容、格式错误3. 程序不健壮,操作未给出明确提示。
6. Trivial级别——轻微缺陷,包括:1. 辅助说明描述不清楚2. 显示格式不规范,数字,日期等格式。 3. 长时间操作未给用户进度提示4. 提示窗口文字未采用行业术语5. 可输入区域和只读区域没有明显的区分标志6. 必输项无提示,或者提示不规范。
7. Enhancement级别——测试建议、其他(非缺陷)1. 以客户角度的易用性测试建议。2. 通过测试挖掘出来的潜在需求。
解决方法:
- 通过附加pytest.mark标记
- 通过allure.feature, allure.story
- 也可以通过allure.servity来附加标记
步骤:
- 在方法,函数和类上面加:@allure.severity(allure.severity_level.TRIVIAL)
- 执行时过滤:
pytest -vs [文件名] --allure-severities normal, critical
前端自动化测试-截图
前端自动化测试经常需要附加图片或html,在适当的地方,适当的时机截图。
@allure.attach显示许多不同类型的附件,可以补充测试,步骤或测试结果。
使用方式:
在测试报告附加网页
allure.attach(body(内容), name, attachment_type, extension) allure.attach('<body>这是一段html</body>', 'html测试', attachment_type=allure.attachment_type.HTML)
在测试报告里附加图片
allure.attach.file(source, name, attachment_type, extension) allure.attach.file('./123.jpg', name='这是一个图片', attachment_type=allure.attachment_type.JPG)
示例代码
import alluredef test_attach_text():allure.attach('这是一个纯文本', attachment_type=allure.attachment_type.TEXT)def test_attach_html():allure.attach('<body>这是一段html</body>', 'html测试', attachment_type=allure.attachment_type.HTML)def test_attach_phote():allure.attach.file('./123.jpg', name='这是一个图片', attachment_type=allure.attachment_type.JPG)def test_attach_video():allure.attach.file('./123.mp4',name='这是一个视频',attachment_type=allure.attachment_type.MP4)
import allure
from selenium import webdriver
import time
import pytest@allure.testcase('https://www.baidu.com/', '百度搜索功能')
@pytest.mark.parametrize('data',['allure', 'pytest', 'unittest'],ids=['search allure', 'search pytest', 'search unittest'])
def test_search(data):with allure.step('步骤1:打开浏览器输入百度地址'):driver = webdriver.Chrome()driver.implicitly_wait(5)driver.get('https://www.baidu.com/')with allure.step(f'步骤2:在搜索框中输入{data}, 并点击百度一下'):driver.find_element_by_id('kw').send_keys(data)driver.find_element_by_id('su').click()time.sleep(2)with allure.step('步骤3: 截图保存到项目中'):driver.save_screenshot(f'./result/{data}.jpg')allure.attach.file(f'./result/{data}.jpg', name=f'搜索{data}的截图', attachment_type=allure.attachment_type.JPG)allure.attach(driver.page_source, f'搜索{data}的网页内容', allure.attachment_type.HTML)with allure.step('步骤4:关闭浏览器,退出'):driver.quit()
Pytest测试框架的基本使用和allure测试报告相关推荐
- Pytest系列——allure(原理)之allure工具与Pytest测试框架集成
官方介绍 1.Allure Framework是一种灵活的轻量级多语言测试报告工具,不仅可以以简洁的Web报告形式非常简洁地显示已测试的内容,也允许参与开发过程的每个人从日常测试中提取最大程度的有用信 ...
- Pytest测试框架(五):pytest + allure生成测试报告
系列文章目录 Pytest测试框架(一):pytest安装及用例执行 Pytest测试框架(二):pytest 的setup/teardown方法 Pytest测试框架(三):pytest fixtu ...
- Pytest测试框架(二):pytest 的setup/teardown方法
系列文章目录 Pytest测试框架(一):pytest安装及用例执行 Pytest测试框架(二):pytest 的setup/teardown方法 Pytest测试框架(三):pytest fixtu ...
- Pytest 测试框架——数据驱动
引言 前面已经和大家介绍过 Unittest 测试框架的数据驱动框架 DDT,以及其实现原理.今天和大家分享的是 Pytest 测试框架的数据驱动,Pytest 测试框架的数据驱动是由 pytest ...
- pytest测试框架学习笔记
安装pytest pip是python包管理工具 pip install pytest pytest 生态是由pytest本身和pytest插件 共同构成的: pytest:框架本体 pytest-h ...
- Python编程必不可少的pytest测试框架
进行编程测试重要的是为了更高效的完成功能的实现. pytest是基于unittest实现的第三方测试框架,比 unittest 更加的简洁.高效,并且可以完美兼容 unittest 的测试代码,无需对 ...
- pytest测试框架——allure报告
文章目录 一.allure的介绍 二.allure的运行方式 三.allure报告的生成 方式一.在线报告.会直接打开默认浏览器展示当前报告 方式二.静态资源文件报告(带index.html.css. ...
- pytest测试框架+allure
1.测试识别和运行 文件识别: 在给定的目录中,搜索所有test_.py或者_test.py文件 用例识别: Test*类包含的所有test_*的方法(测试类不能有__init__方法) 不在类中的所 ...
- pytest测试框架(七)---pytest与jenkins集成(pytest+jenkins+allure)
目录 一.pytest注册命令行选项 1.addoption 2.pytestconfig.getoption 3.示例 二.Jenkins上显示allure测试报告 1.安装插件 2.配置Allur ...
最新文章
- 06- web兼容性测试
- 用iptables做IP的静态映射
- 为什么grpc不支持php,带入gRPC:让你的服务同时提供 HTTP 接口
- Vue 2升级 Vue 3初探小细节
- CSS中的三种样式来源:创作人员、读者和用户代理
- 二叉树的基本操作及应用(三)
- python矩阵中插入矩阵_Python | 矩阵的痕迹
- apollo 配置中心_配置中心——Apollo小记
- 【英语学习】【English L06】U07 Jobs L6 I love what I do
- 高通 AI、5G 争夺战!
- Struts2不扫描jar包中的action
- 集合类 collection接口 LinkedList
- 移远BC26模组连接阿里云物联网平台
- 干支纪年法简便算法_高中化学分类学法指导!附高考化学必记知识点及规律(可下载,打印)...
- 编程方式实现Excel转为JPG/PDF等格式
- 中国未来5年最“吃香”的4大行业,市场需求大,堪比铁饭碗!
- 简单的python爬虫爬豆瓣图书TOP250
- 白山数聚蜂巢敏捷集成助力能源企业数字化转型
- 【游戏开发实战】权游红袍女在火中看到了什么,我看到了...(Unity | 粒子系统 | 火焰特效 | ParticleSystem | 手把手制作)
- 搭建Kangle+EasyPanel+WHMCS实时开通付费虚拟空间