为了降低部门内测试人员对自动化测试框架的使用难度,提高自动化使用范围,编写了一套容易上手的自动化使用规范与案例,降低整体代码维护性难度。
该框架基于pytest+allure设计,可适用于常规的接口测试、后端服务测试、接口+后端复杂场景的自动化测试,以下是该框架各部分用途与讲解:
该目录专门存放常用的模块与工具,目的在于简化testCase脚本的编写难度,提高编写速度,例如:配置工具类、对应系统的加解密工具类、excel工具类、文件工具类、ftp常用操作,数据库常用操作,以及其他常用模块的封装。
测试用例中打印的所有日志信息都存储在该目录下,便于执行后查看与调试跟踪。
其他脚本或者用例脚本如果需要进行日志打印,可在文件上方进行日志对象的初始化,然后可在下方的方法、类中进行打印:
import logging
log = logging.getLogger(__name__)
def test_1():
log.info("hello....")
class TestDog(object):
def eat(self):
log.info("eat....haha..")
自动化用例执行后,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"]) # 指定测试文件
该目录主要用来存在一些用例中用到的静态文件等,例如:参数Excel、图片、音频等等。在脚本通常使用相对路径进行访问。
若静态资源也存在分类,可在该目录下进行其他分类目录的创建,并自行管理。
该目录主要用来存放主用例脚本,根据实际的情况,将用例按照模块、不同业务等进行管理,通常采用多个脚本进行区分。
测试用例编写规则如下:
在本框架中主要有两个重要的配置文件:config.yml、pytest.ini
config.yml为用户自定义的配置文件,根据项目需要进行配置参数设置。
例如服务ip、端口,各类组件配置参数、数据库连接等等。
yml文件必须采用yml规范进行参数维护
pytest.ini为pytest本身自带的配置文件,主要作用例如:制定用例发现规则、定义标签、配置日志信息、以及其他一些pytest运行时的参数均可以在该配置文件中配置,简化运行复杂度。
注意:pytest.ini文件位置必须为整个工程的根目录下
该文件主要用来做全局用例共享使用,如参数的共享、测试fixture的定义等,一些初始化的操作通常会放到该文件中,该文件名不能改变,在整个工程中可以有多个,但需要在不同的目录层级下,其应用范围也不一样。
用户定义的全局模块,便于不同用例间全局变量数据的传递等,例如用例参数、配置信息、session,其他全局参数等,使用方法与python中模块中变量的使用方法一致。
注意:导入全局变量时,建议连同模块名字一起带上,如下:
import World
def test_1():
World.session.get(World.config['microbrain']['url])
整个工程运行主程序,必须要在工程的根目录下。
本框架默认使用python3.X
安装后记得配置PATH环境变量
本案例中使用pycharm 2018.3.5版本,实际可使用更高版本
pytest
使用命令安装:pip install pytest
allure
安装如下:
根据实际需要进行安装,常用库如下:
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
执行完成后,会直接打开浏览器展示报告内容
单用例场景
参考test_case章节规则描述
直接参考提供的案例即可
本案例中的参数使用excel进行管理,使用步骤如下:
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表中的数据。
执行完成后,生成报告截图如下:
如果对软件测试有兴趣,想了解更多的测试知识,解决测试问题,以及入门指导,帮你解决测试中遇到的困惑,我们这里有技术高手。如果你正在找工作或者刚刚学校出来,又或者已经工作但是经常觉得难点很多,觉得自己测试方面学的不够精想要继续学习的,想转行怕学不会的, 都可以加入我们==
==,群内可领取最新软件测试大厂面试资料和Python自动化、接口、框架搭建学习资料!微信公号【一诺教育软件测试】