【史上最全】接口测试+接口自动化测试总结(四)


前言

1、yaml(专门用来做配置文件的)

1)yaml格式简介(yaml文件非常简洁)

yaml的意思是:yet anoter markup language(仍是一种置标语言)的缩写
yaml是专门用来写配置文件的语言,非常简洁强大,远比json格式方便
可以用yaml做自动化测试框架的配置文件或者用例文件
yaml作配置文件config file  比如说运行版本参数或者设置on和off都可以使用yaml来做

2)python搭建yaml环境

pyyaml是python的一个专门针对yaml文件操作的模块,
pip install PyYaml

3)python操作yaml库

操作yaml文件主要两大步:读和写
pyyaml 5.1之后,通过禁止默认加载程序(FullLoader)执行任意功能,该load函数也变得更加安全

import yaml


yaml_str = """ 
name: xintian 
age: 20 
ob: Tester 
""" 
res_dict1 = yaml.load(yaml_str,Loader=yaml.FullLoader) 
print(res_dict1) 
print(type(res_dict1)) 

#控制台----输出 
  {'name': 'xintian', 'age': 20, 'job': 'Tester'} 
  <class 'dict'>

4、yaml实际操作

项目工程里面创建一个config文件夹
config文件夹:(配置参数文件  普通文件夹)python文件放包里面,其他文件放文件夹里面(一个有init一个没有)

teach_sq
  config
	test.yaml       yaml配置文件

5、yaml格式语法

基本规则:
大小写敏感
使用缩进表示层级关系(没有大括号或者小括号)
缩进时不允许使用Tab,只允许使用空格
缩进的空格数目不重要,只要相同层级的元素对齐即可
#表示注释,从它开始到行尾都被忽略
yaml中的值有以下基本类型
字符串
整形
浮点数
布尔型
null
时间
日期

6)yaml文件读取操作

#井号表示注释
#1:字典类型::表示字典:冒号后面必须加空格,通过键去取值(字典类型)  {'name': 'tom', 'age': 20}
name: tom
age: 20

#2:列表类型 列表加 -横杠        [10, 20, 30]
- 10
- 20
- 30

#3:复杂的(嵌套的)            [{'info': [10, 20, 30]}]    列表嵌套字典,字典再嵌套列表
- info :
- 10
- 20
- 30

info :                        #{'info': [10, 20, 30]}字 典嵌套列表
- 10
- 20
- 30
#4:模式选择,on代表代码执行某个逻辑,off代表代码不执行某个逻辑,数据代码分离(配置参数修改)
#{'mode': True, 'mode2': False}    yaml里面on表示ture,off表示false
mode: on
mode2: off

#5:设置变量,(某些数据过长,又想一直再yaml里面用,可以这样定义,)
#&var表示定义一个变量var,把‘我是变量 ’的值定义成var变量,变量var一直要用,而且很长的话可以定义成变量,后面可以使用变量名var
#name也是一个值,把name的值定义成变量var,可以改名字
name: &var 我是变量
mode: on
mode2: off
data: *var      #*var 表示使用变量var  *代表取变量名      *var表示使用变量var  &var表示定义变量var
yaml文件的读取
test.yaml

#井号表示注释
#1:字典类型::表示字典:冒号后面必须加空格,通过键去取值(字典类型)  {'name': 'tom', 'age': 20}
name: tom
age: 20

#2:列表类型 列表加 -横杠        [10, 20, 30]
- 10
- 20
- 30

#3:复杂的(嵌套的)            [{'info': [10, 20, 30]}]    列表嵌套字典,字典再嵌套列表
- info :
- 10
- 20
- 30

info :                        #{'info': [10, 20, 30]}字 典嵌套列表
- 10
- 20
- 30
#4:模式选择,on代表代码执行某个逻辑,off代表代码不执行某个逻辑,数据代码分离(配置参数修改)
#{'mode': True, 'mode2': False}    yaml里面on表示ture,off表示false
mode: on
mode2: off

#5:设置变量,(某些数据过长,又想一直再yaml里面用,可以这样定义,)
#&var表示定义一个变量var,把‘我是变量 ’的值定义成var变量,变量var一直要用,而且很长的话可以定义成变量,后面可以使用变量名var
#name也是一个值,把name的值定义成变量var,可以改名字
name: &var 我是变量
mode: on
mode2: off
data: *var      #*var 表示使用变量var  *代表取变量名      *var表示使用变量var  &var表示定义变量var

yaml文件的读取

import yaml                     #导入yaml库


yamlDir="./config/test.yaml"           #对文件操作都需要写路径

						#1:打开操作,不管什么文件都需要一个open打开操作
fo=open(yamlDir,"r",encoding="utf-8")     #以文件对象打开,r以字符串读取,打开的编码格式encoding="utf-8"(可以打开中文)
						#fo返回文件对象

						#2:使用yaml库操作(加载使用yaml库)load--加载--读取
res=yaml.load(fo,Loader=yaml.FullLoader)   #yaml库.load方法(加载读取)-----加载文件对象
						#Loader=yaml.FullLoader---加载方式,安全全部加载,yaml 5.1后面的版本必须写加载方式,不然警告
print(res)

8)yaml文件写入操作:dump去写

有些项目运行时候会把数据写到一个文件里面去

启动参数,运行参数,什么模式,什么状态写到一个文件,运行信息,运行日志—写入

写入会覆盖了前面写的内容,

python操作yaml库写入文件:字典–转换–字符串

写个简单的字典:python_obj = {“name”: u"灰蓝",“age”: 0,“job”: “Tester”},然后dump写进去就行

import yaml


python_obj = {"name": u"灰蓝","age": 0,"job": "Tester"}
f=open(yamlDir, 'w',encoding='utf-8')
y = yaml.dump(python_obj,f, default_flow_style=False)       #default_flow_style  写的风格模式
print(y)
print(type(y))

def set_yaml():                         #yaml文件的写入操作函数
python_obj = {"name": u"灰蓝", "age": 0, "job": "Tester"}
yamlDir='./test02.yaml'
with open(yamlDir, 'w',encoding='utf-8') as f:
  yaml.safe_dump(python_obj, f)

open(yamlDir, 'w',encoding='utf-8')            #换成a模式打开写入文件,不能出现同名的,w每次清空文件再写

9)多组yaml数据

yaml做配参和简单的用例如下:
#登录操作 下面每一个用例是列表 -是列表

- #test_01
url: /api/mgr/loginReq       #路径
method: POST             # 请求方法
detail: 正常登录
header:
content-Type: application/x-www-form-urlencoded
data:
username: auto
password: sdfsdfsdf
reps:
retcode: 0
- #test_02
url: /api/mgr/loginReq           #路径
method: POST                 # 请求方法
detail: 没有账号,有密码
header:
content-Type: application/x-www-form-urlencoded
data:
username: ""
password: sdfsdfsdf
reps:
retcode: 1
reason: 账号密码错误
- #test_03
url: /api/mgr/loginReq #路径
method: POST # 请求方法
detail: 有账号,没有密码
header:
content-Type: application/x-www-form-urlencoded
data:
username: auto
password: ""
reps:
retcode: 1
reason: 账号密码错误

- #test_04
url: /api/mgr/loginReq #路径
method: POST # 请求方法
detail: 账号密码都没有
header:
content-Type: application/x-www-form-urlencoded
data:
username: ""
password: ""
reps:
retcode: 1
reason: 账号密码错误

读取上面这种yaml多个用例:

import yaml
import json


def get_yaml_data():#[(),()]
	yamlDir = './config/test02.yaml'    #路径
	#1- 打开操作
	fo = open(yamlDir,'r',encoding='utf-8')
	#2- 使用库操作--load--加载--读取的概念
	res = yaml.load(fo,Loader=yaml.FullLoader)
	resList = []                                    #存放结果---[(),()]
	for one in res:
		resList.append((json.dumps(one['data']),json.dumps(one['reps'])))
	return resList

print(get_yaml_data())

yaml文件:特殊字符\n,\t需要加引号,反斜杠,转义符什么的需要加引号,其他的不用

yaml文件,代码后面跟的注释需要加空格  如:xxxxxx  #这是注释    不然会报错

10)读取多个yaml数据使用yaml.load_all,如果yaml文件里只有一个数据使用yaml.load

def get_yamls():                                      #读取多个yaml数据,可以读很多组数据,用---分隔的yaml数据
    fileobject = open(YamlDir, 'r', encoding='utf-8')
    res = yaml.load_all(fileobject.read(),Loader=yaml.FullLoader)       #返回迭代器:<generator object load_all at 0x000001F38C51BE08>
    for one in res:                                #返回的这个代器可以使用list转成列表
        print(one)

2、项目总结

test_case   
里面有两个测试模块:test_login.py登录 test_lesson.py课程

整个test_case 跑起来有两种方法:
一般我们不会在pycham里面跑整个项目

方案一:pytest命令行去跑,cmd切到test_case目录里面:
输入pytest -sq (不打报告不干其他,只运行,运行所有的,运行cmd当前目录文件下的所有的测试用例,自动识别带test开头的模块)

方案二:ywt_api_run_浏览器模式.bat.bat批处理文件运行
ywt_api_run_浏览器模式.bat 文件
bat批处理文件(可以一键打开浏览器的)

@echo off
echo ywt自动化运行准备开始......                                                  #基本的输出描述
@echo on

del /f /s /q  G:\xxx\Python\Demo\teach_sq\report\tmp\*.json                #删除项目中不需要的数据
del /f /s /q  G:\xxx\Python\Demo\teach_sq\report\tmp\*.jpg
del /f /s /q  G:\xxx\Python\Demo\teach_sq\report\report

@echo off
echo 环境文件删除工作完成,开始运行脚本......                                                                        
@echo on

G:
cd  G:/SongQin/Python/Demo/teach_sq/test_case                           #切换到testcase路径,理解里面pytest执行代码,生成allure报告
pytest  -sq --alluredir=../report/tmp

allure serve ../report/tmp

@echo off
echo 接口自动化运行成功
pause

通过:ywt_api_run_浏览器模式.bat 文件一键执行脚本,生成报告(真正意义的自动化,本机执行)

3、allure报告优化

allure报告优化,按模块做个分层
报告做漂亮需要做allure标签:报告分层(引入allure标签,allure标签分层)

1)每个接口方法都加个注释(描述) —报告里面都会体现

‘’‘登录接口’‘’,报告里面会看到这个注释(描述)
方法一:函数注释
方法二:写一个描述的单词:@allure.description(“爱看书的急啊卡的金克拉”)     #接口信息描述

2)登录做成一个模块,大的标签—大的层

1层标签:@allure.feature(“登录模块”) ,大标签,对类来操作
2层标签:@allure.story(“登录接口”) , 对接口方法操作
3层标签:@allure.title(“登录接口用例”) ,对接口用例操作,针对每个用例

3)allure报告一些其他的描述

allure报告上展示环境等属性,allure报告运行环境(报告怎么测试的,环境怎么样,报告描述,概要,描述整个项目的基本情况)
在report的tmp文件夹加一个environment.properties文件

teach_sq        
report
tmp
environment.properties ----环境属性文件,配置文件,给报告用的,一般自己手写
tem文件夹里面放个:environment.properties文件,文件里面可以写这个项目环境的基本描述:如下写
python.version=3.6.5
projectUrl=127.0.0.1/login
Browser=FireFox_77.6
environment.properties 配置文件

那么版本运行的时候allure报告首页的:ENVIRONMENT栏会有相应的描述如下:
ENVIRONMENT
projectUrl
127.0.0.1/login
python.version
3.6.5
Browser
FireFox_77.6

allure报告的趋势,本地是没有的,pytest里面做history是有的,以前临时文件的都不能删除,留着

一般需要和jinkins结合来做的,jinkins自己会做,会有构建历史的,jikins有个插件allure,里面构建完了后会把allure每次运行结果放到趋势里面去
本地的:localhistory(tmp文件不能删除,移动到history里面去然后导入进来)自己学习

4、接口自动化代码写道后期需要加的三个步骤

1)yaml设计登录,
2)allure报告优化,做标签
3)xxx.bat批处理文件一键执行跑起来(windows是bat mac是:sh)
jinkins最终用的就是命令行,怎么命令行启动,起各种服务,都是.命令行运行(需要掌握)

批处理文件执行整个自动化:环境清除+执行代码+生成allure报告
不是点run跑

最全Python自动化测试进阶之路视频教学 (全集)

下面是我整理的2025年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

人生最动人的风景,往往藏在最难攀爬的高处。当你觉得力竭时,请记住:每一次坚持都在雕刻更强大的自己。别问路有多远,只管迈步向前;别怕山有多高,向上攀登就是答案!

你体内沉睡着改变世界的力量!每个清晨都是改写命运的新机会,每次挫折都是精心包装的礼物。当全世界都在说"不可能"时,正是你证明"可能"的最好时机!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值