一、测试用例的识别与运行

目录识别

通过pytest.ini配置文件配置

  • 如果未指定任何参数,则收集从testpaths(如已配置)或当前目录开始。另外,命令行参数可以在目录、文件名或节点ID的任何组合中使用。
  • 递归到目录,除非它们匹配norecursedirs,排除目录搜索

文件识别

  • 在这些目录中,搜索 test_*.py 或 *_test.py 文件

用例识别

  • Test*类包含的所有test_ * 的方法(测试类不能带有__init__方法)
  • 不在类中的所有test_*方法

pytest也可以执行unittest框架写的用例和方法

运行方式

  1. pycharm界面运行
    修改默认的测试运行方式
  2. 右键 文件/ 目录 运行
  3. 使用命令行方式运行

二、常用的命令行参数

-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的服务,需要两个步骤:

  1. 生成报告

    # 注意:覆盖路径加--clean
    allure generate ./result/ -o ./report/ --clean
    
  2. 打开报告

    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来附加标记

步骤:

  1. 在方法,函数和类上面加:@allure.severity(allure.severity_level.TRIVIAL)
  2. 执行时过滤: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测试报告相关推荐

  1. Pytest系列——allure(原理)之allure工具与Pytest测试框架集成

    官方介绍 1.Allure Framework是一种灵活的轻量级多语言测试报告工具,不仅可以以简洁的Web报告形式非常简洁地显示已测试的内容,也允许参与开发过程的每个人从日常测试中提取最大程度的有用信 ...

  2. Pytest测试框架(五):pytest + allure生成测试报告

    系列文章目录 Pytest测试框架(一):pytest安装及用例执行 Pytest测试框架(二):pytest 的setup/teardown方法 Pytest测试框架(三):pytest fixtu ...

  3. Pytest测试框架(二):pytest 的setup/teardown方法

    系列文章目录 Pytest测试框架(一):pytest安装及用例执行 Pytest测试框架(二):pytest 的setup/teardown方法 Pytest测试框架(三):pytest fixtu ...

  4. Pytest 测试框架——数据驱动

    引言 前面已经和大家介绍过 Unittest 测试框架的数据驱动框架 DDT,以及其实现原理.今天和大家分享的是 Pytest 测试框架的数据驱动,Pytest 测试框架的数据驱动是由 pytest ...

  5. pytest测试框架学习笔记

    安装pytest pip是python包管理工具 pip install pytest pytest 生态是由pytest本身和pytest插件 共同构成的: pytest:框架本体 pytest-h ...

  6. Python编程必不可少的pytest测试框架

    进行编程测试重要的是为了更高效的完成功能的实现. pytest是基于unittest实现的第三方测试框架,比 unittest 更加的简洁.高效,并且可以完美兼容 unittest 的测试代码,无需对 ...

  7. pytest测试框架——allure报告

    文章目录 一.allure的介绍 二.allure的运行方式 三.allure报告的生成 方式一.在线报告.会直接打开默认浏览器展示当前报告 方式二.静态资源文件报告(带index.html.css. ...

  8. pytest测试框架+allure

    1.测试识别和运行 文件识别: 在给定的目录中,搜索所有test_.py或者_test.py文件 用例识别: Test*类包含的所有test_*的方法(测试类不能有__init__方法) 不在类中的所 ...

  9. pytest测试框架(七)---pytest与jenkins集成(pytest+jenkins+allure)

    目录 一.pytest注册命令行选项 1.addoption 2.pytestconfig.getoption 3.示例 二.Jenkins上显示allure测试报告 1.安装插件 2.配置Allur ...

最新文章

  1. 06- web兼容性测试
  2. 用iptables做IP的静态映射
  3. 为什么grpc不支持php,带入gRPC:让你的服务同时提供 HTTP 接口
  4. Vue 2升级 Vue 3初探小细节
  5. CSS中的三种样式来源:创作人员、读者和用户代理
  6. 二叉树的基本操作及应用(三)
  7. python矩阵中插入矩阵_Python | 矩阵的痕迹
  8. apollo 配置中心_配置中心——Apollo小记
  9. 【英语学习】【English L06】U07 Jobs L6 I love what I do
  10. 高通 AI、5G 争夺战!
  11. Struts2不扫描jar包中的action
  12. 集合类 collection接口 LinkedList
  13. 移远BC26模组连接阿里云物联网平台
  14. 干支纪年法简便算法_高中化学分类学法指导!附高考化学必记知识点及规律(可下载,打印)...
  15. 编程方式实现Excel转为JPG/PDF等格式
  16. 中国未来5年最“吃香”的4大行业,市场需求大,堪比铁饭碗!
  17. 简单的python爬虫爬豆瓣图书TOP250
  18. 白山数聚蜂巢敏捷集成助力能源企业数字化转型
  19. 【游戏开发实战】权游红袍女在火中看到了什么,我看到了...(Unity | 粒子系统 | 火焰特效 | ParticleSystem | 手把手制作)
  20. 搭建Kangle+EasyPanel+WHMCS实时开通付费虚拟空间

热门文章

  1. 【Pytorch->ONNX->NCNN->NCNNfp16->vs编译】Windows NCNN部署
  2. 百趣代谢组学资讯:@熬夜的年轻人代谢紊乱急救包-喝普洱茶!
  3. 职场生存--向上管理
  4. mysql 异地备份脚本_MySQL异地备份脚本
  5. 什么是路由器 它的工作原理是什么
  6. 找出给定字符串中大写字符(即'A'-'Z')的个数
  7. 43套高质量PPT模板—创意风格主题
  8. Unreal 入门-EQS
  9. Windows系统环境变量大全(XP/Win7/Win8)
  10. 纯前端实现 App Store 卡片展开效果