pytest自动化测试框架使用讲解

背景目的

为了降低部门内测试人员对自动化测试框架的使用难度,提高自动化使用范围,编写了一套容易上手的自动化使用规范与案例,降低整体代码维护性难度。

框架介绍

该框架基于pytest+allure设计,可适用于常规的接口测试、后端服务测试、接口+后端复杂场景的自动化测试,以下是该框架各部分用途与讲解:

common

该目录专门存放常用的模块与工具,目的在于简化testCase脚本的编写难度,提高编写速度,例如:配置工具类、对应系统的加解密工具类、excel工具类、文件工具类、ftp常用操作,数据库常用操作,以及其他常用模块的封装。

log

测试用例中打印的所有日志信息都存储在该目录下,便于执行后查看与调试跟踪。
其他脚本或者用例脚本如果需要进行日志打印,可在文件上方进行日志对象的初始化,然后可在下方的方法、类中进行打印:

import logging

log = logging.getLogger(__name__)

def test_1():
    log.info("hello....")
    
class TestDog(object):
    def eat(self):
        log.info("eat....haha..")

report

自动化用例执行后,allure产生的报告结果存放在该目录下,该目录主要由main.py执行时进行指定,不建议更改到其他目录,例如:

#-*-coding:u8-*-
import pytest
import os
import time

if __name__ == '__main__':
    pytest.main(['--alluredir=./report','--clean-alluredir', "./test_case/test_demo_1.py"])  # 指定测试文件

resource

该目录主要用来存在一些用例中用到的静态文件等,例如:参数Excel、图片、音频等等。在脚本通常使用相对路径进行访问。
若静态资源也存在分类,可在该目录下进行其他分类目录的创建,并自行管理。

test_case

该目录主要用来存放主用例脚本,根据实际的情况,将用例按照模块、不同业务等进行管理,通常采用多个脚本进行区分。
测试用例编写规则如下:

  1. 测试文件以test_开头(以_test结尾也可以)
  2. 测试类以Test开头,并且不能带有 init 方法
  3. 测试函数以test_开头
  4. 断言必须使用 assert
    并配合pytest、allure提供的注解接口用来添加用例的描述信息、标题、给用例进行标记(方便过滤)、参数化等等,详细可参考google或者本文档后面的参考案例。
    关于测试fixture的使用也可以随测试用例一起进行使用

配置文件

在本框架中主要有两个重要的配置文件:config.yml、pytest.ini

config.yml

config.yml为用户自定义的配置文件,根据项目需要进行配置参数设置。
例如服务ip、端口,各类组件配置参数、数据库连接等等。
yml文件必须采用yml规范进行参数维护

pytest.ini

pytest.ini为pytest本身自带的配置文件,主要作用例如:制定用例发现规则、定义标签、配置日志信息、以及其他一些pytest运行时的参数均可以在该配置文件中配置,简化运行复杂度。
注意:pytest.ini文件位置必须为整个工程的根目录下

conftest.py

该文件主要用来做全局用例共享使用,如参数的共享、测试fixture的定义等,一些初始化的操作通常会放到该文件中,该文件名不能改变,在整个工程中可以有多个,但需要在不同的目录层级下,其应用范围也不一样。

World.py

用户定义的全局模块,便于不同用例间全局变量数据的传递等,例如用例参数、配置信息、session,其他全局参数等,使用方法与python中模块中变量的使用方法一致。
注意:导入全局变量时,建议连同模块名字一起带上,如下:

import World

def test_1():
    World.session.get(World.config['microbrain']['url])

main.py

整个工程运行主程序,必须要在工程的根目录下。

环境搭建

python

本框架默认使用python3.X
安装后记得配置PATH环境变量

pycharm

本案例中使用pycharm 2018.3.5版本,实际可使用更高版本

依赖安装

pytest
使用命令安装:pip install pytest
allure
安装如下:

  1. pip install pytest-allure
  2. 下载https://repo1.maven.org/maven2/io/qameta/allure/allure-commandline/2.13.6/allure-commandline-2.13.6.zip
    解压后并将bin目录配置到PATH环境变量中
    yaml
    使用命令安装:pip install pyyaml

其他依赖

根据实际需要进行安装,常用库如下:
openpyxl
requests
pymysql

打开工程

从svn仓库中下载完整的框架工程,在pycharm中选择File->Open 选择pycharm工程目录即可打开
注意:对于有多环境的py2、py3,在打开工程后不确定选择是什么版本,使用File->Setting->Project->Project Interpreter 来进行python不同版本环境的选择。

测试执行

执行
直接在工程目录下运行main.py文件即可
或者在命令行下运行main.py文件

查看报告

通常在执行之后本框架只会生成中间的allure结果,需要使用allure命令生成html的web报告,在工程目录下执行命令:
allure generate ./report -o ./report/html
执行完成后,可在report/html目录下生成报告的静态文件,使用浏览器打开即可。
或者使用命令:
allure serve ./report
执行完成后,会直接打开浏览器展示报告内容
pytest自动化测试框架使用讲解_第1张图片

案例讲解

单用例场景

参考test_case章节规则描述
直接参考提供的案例即可

参数化场景

本案例中的参数使用excel进行管理,使用步骤如下:

  1. 初始化所需要的参数
  2. 使用parametrize注解进行参数传递

excel中参数如下:
pytest自动化测试框架使用讲解_第2张图片
测试用例中代码如下:

case_data = get_excel_case("./resource/test_case.xlsx",{
     "ld":2})

@pytest.mark.parametrize("p",case_data)
def test_haha(p):
    allure.dynamic.title(p['case_id'])
    log.info(p)

代码讲解:

get_excel_case方法从excel中 “ld” sheet表中第2行开始,将所有数据读取至case_data变量中,变量类型为数组。
test_haha方法会被执行多次,p参数为每次传入的每一行的excel表中的数据。
执行完成后,生成报告截图如下:
pytest自动化测试框架使用讲解_第3张图片
如果对软件测试有兴趣,想了解更多的测试知识,解决测试问题,以及入门指导,帮你解决测试中遇到的困惑,我们这里有技术高手。如果你正在找工作或者刚刚学校出来,又或者已经工作但是经常觉得难点很多,觉得自己测试方面学的不够精想要继续学习的,想转行怕学不会的, 都可以加入我们==pytest自动化测试框架使用讲解_第4张图片
==,群内可领取最新软件测试大厂面试资料和Python自动化、接口、框架搭建学习资料!微信公号【一诺教育软件测试】

你可能感兴趣的:(程序员,软件测试,测试工程师,软件测试,自动化测试,Pytest,测试框架,测试工程师)