全csdn最全最详细的Pytest自动化测试框架实战,封神级讲解_pytest资料(3)

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

[
{
“request”:
{
“url”: “http://localhost:5000/login”,
“body”:
{
“password”:“admin”,
“sex”:“男”,
“age”:18
}
},
“response”:
[
{
“message”:
{
“username”: “用户名不能为空”
}
}
]
},
{
“request”:
{
“url”: “http://localhost:5000/login”,
“body”:
{
“username”:“wuya”,
“sex”:“男”,
“age”:18
}
},
“response”:
[
{
“message”:
{
“password”: “账户密码不能为空”
}
}
]
},
{
“request”:
{
“url”: “http://localhost:5000/login”,
“body”:
{
“username”:“wuya”,
“password”:“admin”,
“sex”:“asdf”,
“age”:18
}
},
“response”:
[
{
“message”:
{
“sex”: “性别只能是男或者女”
}
}
]
},
{
“request”:
{
“url”: “http://localhost:5000/login”,
“body”:
{
“username”:“wuya”,
“password”:“admin”,
“sex”:“男”,
“age”:“rrest”
}
},
“response”:
[
{
“message”:
{
“age”: “年龄必须为正正数”
}
}
]
},
{
“request”:
{
“url”: “http://localhost:5000/login”,
“body”:
{
“username”:“wuya”,
“password”:“admin”,
“sex”:“男”,
“age”:“18”
}
},
“response”:
[
{
“age”: 18,
“password”: “admin”,
“sex”: “男”,
“username”: “wuya”
}
]
}
]
}


涉及到的测试代码为:



#!/usr/bin/env python
#!coding:utf-8
import pytest
import requests
import json

def readJson():
return json.load(open(‘login.json’,‘r’))[‘item’]

@pytest.mark.parametrize(‘data’,readJson())
def test_json_login(data):
r=requests.post(
url=data[‘request’][‘url’],
json=data[‘request’][‘body’])
assert r.json()==data[‘response’][0]

if name == ‘main’:
pytest.main([“-s”,“-v”,“test_json_login.py”])


## 3.yaml文件


再来看分离到Yaml文件的数据:




#用户名请求为空
“url”: “http://localhost:5000/login”
“body”: ‘{
“password”:“admin”,
“sex”:“男”,
“age”:18
}’
“expect”: ‘{
“message”: {
“username”: “用户名不能为空”
}
}’

#密码参数为空
“url”: “http://localhost:5000/login”
“body”: ‘{
“username”:“admin”,
“sex”:“男”,
“age”:18
}’
“expect”: ‘{
“message”: {
“password”: “账户密码不能为空”
}
}’

#校验性别参数的验证
“url”: “http://localhost:5000/login”
“body”: ‘{
“username”:“wuya”,
“password”:“admin”,
“sex”:“asdf”,
“age”:18
}’
expect: ‘{
“message”: {
“sex”: “性别只能是男或者女”
}
}’

#校验年龄是否是正整数
“url”: “http://localhost:5000/login”
“body”: ‘{
“username”:“wuya”,
“password”:“admin”,
“sex”:“男”,
“age”:“rrest”
}’
“expect”: ‘{
“message”: {
“age”: “年龄必须为正正数”
}
}’

#登录成功
“url”: “http://localhost:5000/login”
“body”: ‘{
“username”:“wuya”,
“password”:“admin”,
“sex”:“男”,
“age”:“18”
}’
“expect”: ‘{
“age”: 18,
“password”: “admin”,
“sex”: “男”,
“username”: “wuya”
}’


涉及到的测试代码为:



#!/usr/bin/env python
#!coding:utf-8
import pytest
import requests
import yaml

def readYaml():
with open(‘login.yaml’,‘r’) as f:
return list(yaml.safe_load_all(f))

@pytest.mark.parametrize(‘data’,readYaml())
def test_login(data):
r=requests.post(
url=data[‘url’],
json=json.loads(data[‘body’]))
assert r.json()==json.loads(data[‘expect’])


## 4.CSV


分离到CSV的文件内容为:


![图片](https://img-blog.csdnimg.cn/img_convert/584ef550726c86f39ee91d952ddab317.png)


涉及到的测试代码为:



#!/usr/bin/env python
#!coding:utf-8
import pytest
import requests
import csv

def readCsv():
data=list()
with open(‘login.csv’,‘r’) as f:
reader=csv.reader(f)
next(reader)
for item in reader:
data.append(item)
return data

@pytest.mark.parametrize(‘data’,readCsv())
def test_csv_login(data):
r=requests.post(
url=data[0],
json=json.loads(data[1]))
assert r.json()==json.loads(data[2])

最后来看分离到Excel的文件内容:


![图片](https://img-blog.csdnimg.cn/img_convert/ac9a32ba5d001a3d5d927cd974f7e293.png)


涉及到的测试代码为:



#!/usr/bin/env python
#!coding:utf-8
import pytest
import requests
import xlrd

def readExcel():
data=list()
book=xlrd.open_workbook(‘login.xls’)
sheet=book.sheet_by_index(0)
for item in range(1,sheet.nrows):
data.append(sheet.row_values(item))
return data

@pytest.mark.parametrize(‘data’,readExcel())
def test_excel_login(data):
r=requests.post(
url=data[0],
json=json.loads(data[1]))
assert r.json()==json.loads(data[2])


其实我们发现套路都是一样的,不管把数据分离到什么样的数据格式下,都得符合它的本质思想,也就是参数化的本质是对列表中的对象进行循环赋值,把握住这样的一个思想就可以了。整合上面的所有代码,完整代码为:



#!/usr/bin/env python
#!coding:utf-8
import pytest
import requests
import json
import yaml
import csv
import xlrd

def readJson():
return json.load(open(‘login.json’,‘r’))[‘item’]

def readYaml():
with open(‘login.yaml’,‘r’) as f:
return list(yaml.safe_load_all(f))

def readCsv():
data=list()
with open(‘login.csv’,‘r’) as f:
reader=csv.reader(f)
next(reader)
for item in reader:
data.append(item)
return data

def readExcel():
data=list()
book=xlrd.open_workbook(‘login.xls’)
sheet=book.sheet_by_index(0)
for item in range(1,sheet.nrows):
data.append(sheet.row_values(item))
return data

@pytest.mark.parametrize(‘data’,readJson())
def test_json_login(data):
r=requests.post(
url=data[‘request’][‘url’],
json=data[‘request’][‘body’])
assert r.json()==data[‘response’][0]

@pytest.mark.parametrize(‘data’,readYaml())
def test_yaml_login(data):
r=requests.post(
url=data[‘url’],
json=json.loads(data[‘body’]))
assert r.json()==json.loads(data[‘expect’])

@pytest.mark.parametrize(‘data’,readCsv())
def test_csv_login(data):
r=requests.post(
url=data[0],
json=json.loads(data[1]))
assert r.json()==json.loads(data[2])

@pytest.mark.parametrize(‘data’,readExcel())
def test_excel_login(data):
r=requests.post(
url=data[0],
json=json.loads(data[1]))
assert r.json()==json.loads(data[2])


执行后的结果信息为:


![图片](https://img-blog.csdnimg.cn/img_convert/a0c7cd6c6b13cd6d27e4a9ee3dd62736.png)


     Pytest测试框架最强大的功能除了丰富的第三方插件外,还有就是它的Fixture和共享Fixture的conftest.py,下面具体来看被测试的接口代码:



from flask import Flask,make_response,jsonify,abort,request
from flask_restful import Api,Resource
from flask_httpauth import HTTPBasicAuth

from flask import Flask
from flask_jwt import JWT, jwt_required, current_identity
from werkzeug.security import safe_str_cmp

app=Flask(name)
app.debug = True
app.config[‘SECRET_KEY’] = ‘super-secret’
api=Api(app=app)
auth=HTTPBasicAuth()

@auth.get_password
def get_password(name):
if name==‘admin’:
return ‘admin’
@auth.error_handler
def authoorized():
return make_response(jsonify({‘msg’:“请认证”}),403)

books=[
{‘id’:1,‘author’:‘wuya’,‘name’:‘Python接口自动化测试实战’,‘done’:True},
{‘id’:2,‘author’:‘无涯’,‘name’:‘Selenium3自动化测试实战’,‘done’:False}
]

class User(object):
def init(self, id, username, password):
self.id = id
self.username = username
self.password = password

def str(self):
return “User(id=‘%s’)” % self.id

users = [
User(1, ‘wuya’, ‘asd888’),
User(2, ‘admin’, ‘admin’),
]

username_table = {u.username: u for u in users}
userid_table = {u.id: u for u in users}

def authenticate(username, password):
user = username_table.get(username, None)
if user and safe_str_cmp(user.password.encode(‘utf-8’), password.encode(‘utf-8’)):
return user

def identity(payload):
user_id = payload[‘identity’]
return userid_table.get(user_id, None)

jwt = JWT(app, authenticate, identity)

class Books(Resource):

decorators = [auth.login_required]

decorators=[jwt_required()]

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

(app, authenticate, identity)

class Books(Resource):

decorators = [auth.login_required]

decorators=[jwt_required()]

[外链图片转存中…(img-36SdB1nU-1715304049522)]
[外链图片转存中…(img-NX8LCoHi-1715304049523)]
[外链图片转存中…(img-pEBoFRKM-1715304049523)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值