Python接口自动化测试之Requests库&Pytest框架_pytest框架,requests接口测试函数


1. 文件下载



#小文件下载
import requests
r = requests.get(“https://img.sitven.cn/Tencent_blog_detail.jpg”)
with open(r"D:\a.jpg", “wb”) as f:
f.write(r.content)

#大文件下载
import requests
def test_downloads(url, file):
s = requests.session()
r = s.get(url, stream=True, verify=False)
with open(file, “wb”) as f:
for chunk in r.iter_content(chunk_size=512):
f.write(chunk)
if name == “main”:
url = “https://www.url.com/test/export”
file = “D:\a.xlsx”
test_downloads(url=url, file=file)
#转载至:https://blog.csdn.net/weixin_43507959/article/details/107326912


1. timeout超时



#导包
import requests
#循环10次
for i in range(0,10):
try:
url=“http://xxxxxxxxxxxxxxxx”
data={
“head”:{“lastnotice”:0,“msgid”:“”,“accessToken”:“89a08bff-15d7-4d7a-9967-0b5f4fb699ce”},
“body”:{“clinicid”:“978f661e-1782-43bd-8675-b0ff1138ab7c”,“deptid”:“09b8515b-b01b-4771-9356-aed6b5aa01bf”,“doctorid”:“65ac0251-10ff-473a-af8a-20e8969176f7”,“registtype”:0,“card_num”:“”,“bcc334”:“”,“patientopt”:1,“bkc368”:“1”,“patient”:{“cardid”:“”,“medicalcardid”:“”,“label”:“”,“sourcetype”:1,“nationid”:“01”,“maritalstatus”:0,“address”:“”,“company”:“”,“jobname”:“”,“email”:“”,“remark”:“”,“bcc334”:“”,“name”:“11”,“gender”:1,“phone”:“”,“birthdate”:“2020-03-23”,“patienttype”:1,“szsbcardid”:“”}}
}
#发送post请求,超时时间0.03s
r=requests.post(url=url,json=data,timeout=0.03)
print(r.text)
print(r.cookies)
except:
print(‘error’)
#可参考:https://blog.csdn.net/weixin_44350337/article/details/99655387


1. 鉴权


7.1 auth参数鉴权



import requests
url = ‘http://192.168.1.1’
headers = {} # 有的不带头也能请求到 不带头可以忽略这行 和headers=headers,这两处
r = requests.get(url, auth=(‘admin’, ‘123456’), headers=headers, timeout=10)
print(r.text)


7.2 session操作



#实例化session
session = requests.session()
#使用session发起请求
response = session.post(url,headers=req_header,data=form_data)


7.3 token操作



import requests
url=“http://xxxxxxxxxxxxxxx”

json={
“head”:{“accessToken”:“”,“lastnotice”:0,“msgid”:“”},
“body”:{“username”:“15623720880”,“password”:“48028d2558577c526a017883211b4066”,“forceLogin”:0}
}
r=requests.post(url=url,json=json)
print(r.text)
print(r.cookies)

#登录成功后返回token,带入下一个接口
for i in range(0,1):
try:
url=“xxxxxxxxxxxxxxxxxx”
data={
“head”:{“lastnotice”:0,“msgid”:“”,“accessToken”:“89a08bff-15d7-4d7a-9967-0b5f4fb699ce”},
“body”:{“clinicid”:“978f661e-1782-43bd-8675-b0ff1138ab7c”,“deptid”:“09b8515b-b01b-4771-9356-aed6b5aa01bf”,“doctorid”:“65ac0251-10ff-473a-af8a-20e8969176f7”,“registtype”:0,“card_num”:“”,“bcc334”:“”,“patientopt”:1,“bkc368”:“1”,“patient”:{“cardid”:“”,“medicalcardid”:“”,“label”:“”,“sourcetype”:1,“nationid”:“01”,“maritalstatus”:0,“address”:“”,“company”:“”,“jobname”:“”,“email”:“”,“remark”:“”,“bcc334”:“”,“name”:“11”,“gender”:1,“phone”:“”,“birthdate”:“2020-03-23”,“patienttype”:1,“szsbcardid”:“”}}
}
r=requests.post(url=url,json=data,timeout=0.09)
print(r.text)
print(r.cookies)
except:
print(‘error’)


7.4 sign签名



appid:wxd930ea5d5a258f4f

mch_id:10000100

device_info:1000

body:test

nonce_str:ibuaiVcKdpRxkhJA

import hashlib
#需要加密的字符串
stringA=“appid=wxd930ea5d5a258f4f&body=test&device_info=1000&mch_id=10000100&nonce_str=ibuaiVcKdpRxkhJA”;
#构建一个对象为md
md=hashlib.md5()
#对stringA字符串进行编码
md.update(stringA.encode())
#生成后的加密值
AES=md.hexdigest()
#把加密的结果,小写转大写 upper函数
AES=AES.upper()
print(AES)
参考微信支付:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_3


自动化模块划分


config 配置文件(python package)#directory和python package大同小异  
 common 公共的方法(python package)  
 testdata 测试数据(python package)  
 test\_case测试用例(python package)  
 report 报告(directory)  
 run\_case 测试执行(python package)  
 log 日志  
![](https://img-blog.csdnimg.cn/9d9d5c7588a242228d02356db77763ca.png)


8.1 config配置文件



def server_ip():
‘’’
ait_ip='‘开发环境的服务器ip
sit_ip=’‘测试环境的服务器ip
:return: 返回不同服务器的地址
‘’’

server_add={
    'dev_ip' : 'http://his.xxxxxxxxxxx.com',
    'sit_ip' : 'http://his.xxxxxxxxxxxx.comm'
}
return server_add['dev_ip']

def sql_conf():
‘’’
host数据库ip
user数据库用户名
password数据库密码
database:连接数据库名
port数据库端口
chrset数据库字符集 中文utf-8
:return:
‘’’
host=‘localhost’
user=‘root’
password=‘123456’
database=‘mysql’
port=3306
charset=‘utf8’ #这用utf8,utf-8会报错
return host,user,password,database,port,charset


 8.2 common 公共的方法



封装一个读取Excel表格数据的函数

对Excel表格数据的读取需要用到一个库——xlrd库

import xlrd
def get_excel_value(i):
‘’’
读取表中一行的数据
:return:返回2,3行数据
‘’’
filename = r"…/testdata/jiekou.xls" #文件要用相对路径
book = xlrd.open_workbook(filename) # 打开一个工作薄,不需要手动进行关闭
# sheet = book.sheet_by_name(“Sheet1”) 根据工作表的名字,获取一个工作表对象
sheet = book.sheet_by_index(0) # 获取一个工作表,以index的方式,这里是获取第1个工作表
return sheet.cell_value(i,1),sheet.cell_value(i,2)

print(sheet.nrows) #打印所有行

print(sheet.ncols) #打印所有列

print(sheet.row_values(0)) #打印第一行

print(sheet.col_values(0)) #打印第一列

print(sheet.cell_value(0,1)) #打印第一行,第二列

for i in range(1, sheet.nrows):

# print(sheet.cell_value(i,1),sheet.cell_value(i,2))# 打印单元格[所有数据]的值
# str='(sheet.cell_value(i,1),sheet.cell_value(i,2)))'
# print(str)

for i in range(1, sheet.nrows):

# for j in range(0, sheet.ncols):

print(sheet.cell_value(i,j)) # 打印单元格[i,j]的值


import pymysql
from config.sql_conf import *
def get_sql(sql):
‘’’
:param sql:运行查询的sql语句
:return:数据库查询结果
‘’’
#建立一个连接对象
host, user, password, database, port, charset=sql_conf()
db=pymysql.connect(host=host,user=user,password=password,database=database,port=port,charset=charset)
#建立一个游标
cursor=db.cursor()
#执行sql语句
cursor.execute(sql)
#把sql运行的数据保存在data变量里面
data=cursor.fetchall() #获取查询出的所有的值
cursor.close() #关闭游标
db.close() #关闭数据库连接
return data

print(get_sql(“SELECT help_topic_id FROM help_topic WHERE Name=‘MOD’”)) #执行sql语句

print(type(get_sql(“SELECT help_topic_id FROM help_topic WHERE Name=‘MOD’”)))


8.3 testdata 测试数据



主要存放xls,txt,csv测试数据


![](https://img-blog.csdnimg.cn/880b51baed2b493e9563edac19207556.png)


8.4 test\_case测试用例



from common.get_mysql import get_sql
from config.cof import server_ip
from common.get_excel import *
from config.sql_conf import *
import requests

user_id=get_sql(“SELECT help_topic_id FROM help_topic WHERE Name=‘MOD’”)#提取数据库数据

print(user_id)#打印结果

assert get_sql(“SELECT help_topic_id FROM help_topic WHERE Name=‘MOD’”)#断言数据库的数据是否存在

def test_aokao_login():
url=server_ip()+‘/service/user/login’
username,password=get_excel_value(1) #读取文件第二行数据
json={
“head”:{“accessToken”:“”,“lastnotice”:0,“msgid”:“”},
“body”:{“username”:username,“password”:password,“forceLogin”:0}
}

 # usernamepassword=get_excel_value(4)[0] #读取文件第二行数据
 # print(type(usernamepassword))
 # #把str类型转为字典格式 eval 函数
 # json=eval(usernamepassword)
 r=requests.post(url=url,json=json)
 print(r.text)
 assert r.status_code==200 #断言状态码是否等于200
 assert '"accessToken":"89a08bff-15d7-4d7a-9967-0b5f4fb699ce",' in r.text #断言返回信息是否包含accesstoken

def test_aokao_registadd():
url = server_ip()+‘/service/registration/registadd’
data = {
“head”: {“lastnotice”: 0, “msgid”: “”, “accessToken”: “89a08bff-15d7-4d7a-9967-0b5f4fb699ce”},
“body”: {“clinicid”: “978f661e-1782-43bd-8675-b0ff1138ab7c”, “deptid”: “09b8515b-b01b-4771-9356-aed6b5aa01bf”,
“doctorid”: “65ac0251-10ff-473a-af8a-20e8969176f7”, “registtype”: 0, “card_num”: “”, “bcc334”: “”,
“patientopt”: 1, “bkc368”: “1”,
“patient”: {“cardid”: “”, “medicalcardid”: “”, “label”: “”, “sourcetype”: 1, “nationid”: “01”,
“maritalstatus”: 0, “address”: “”, “company”: “”, “jobname”: “”, “email”: “”,
“remark”: “”, “bcc334”: “”, “name”: “11”, “gender”: 1, “phone”: “”,
“birthdate”: “2020-03-23”, “patienttype”: 1, “szsbcardid”: “”}}
}

 r = requests.post(url=url, json=data, timeout=0.09)
 print(r.text)
 print(r.cookies)
 assert r.status_code == 200  # 断言状态码是否等于200

 8.5 report 报告




![img](https://img-blog.csdnimg.cn/img_convert/8d9dfbd2b639c6b6e6fb54feafacc6a8.png)
![img](https://img-blog.csdnimg.cn/img_convert/ab119a716fc51f447453c624ba2c5cbd.png)
![img](https://img-blog.csdnimg.cn/img_convert/b211bd41de8a2c84869b80e5dd09ffed.png)

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

int(r.text)
     print(r.cookies)
     assert r.status_code == 200  # 断言状态码是否等于200

8.5 report 报告

[外链图片转存中…(img-sQ0ZNhog-1719235400852)]
[外链图片转存中…(img-QaligOaF-1719235400853)]
[外链图片转存中…(img-ki396FHA-1719235400854)]

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

  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值