接口测试http.client\requests示例

本文介绍如何使用Python的http.client与requests库进行接口测试,包括处理HTTP协议、模拟登录、多线程模拟多用户、断言封装、数据库操作、JSON处理及Unittest驱动的测试用例,同时涵盖文件上传下载的应用。
摘要由CSDN通过智能技术生成

接口测试示例:

利用fiddler检测请求,获取请求数据进行相应参数替换。
获取请求体,求改请求参数,参数化请求,数据库、CSV、excel储存方式

1.处理HTTP协议

# python中处理HTTP协议,需要导入http.client
from http.client import HTTPConnection

# 打开首页,并进行断言
# 建立与服务器端的连接
conn = HTTPConnection('localhost',8080)
# 获取该请求的响应
# 发送请求,URL地址不到HOST信息
conn.request('GET','/sales/')
# 获取该请求的响应
resp = conn.getreaponse().read().decode()
if '首页' in resp:
	print('打开首页-成功')
else:
	print('打开首页-失败')
# 关闭连接
conn.close()

# 实现登录POST请求,必须指定三个要素:正文,URL地址,Content-Type
# 发送请求,URL地址不带HOST请求
conn.request('GET','/salse/')
param = 'username=admin&pas sword= admin123&verifycode=0000'
header = {
   ' Content-Type': 'application/x-Www-form-urlencoded'}
conn.request('POST','http://localhost:8080/user/login/',body=param,headers=header)
resp = conn.getresponse().read().decode()
print(resp)

conn.close()

2.模拟登录与添加数据

请求参数中有中文使用 encode()编码

import http.client

class CustomerManage:
	def __init__(self):
		self.conn = http,client.HTTPConnection(host='localhost',port=8080)
	# 登录
	def login(self):
		param = 'username=admin&pa s sword=admin123&verifycode=000O'
		header = {
   'Content-Type': 'application/x-ww form-urlencoded'}
		self.cinn.request(method="POST",url="/user/login",body=param,headers=header)
		resp = self.conn.getresponse().read().decode()
		print(resp)
	# 添加数据
	def add(self):
		param = 'customername=接口王&customerphone=13512356783&childsex=男&childdate=2019-06-29&creditkids=100&creditcloth=200'
		header = {
   'Content-Type': 'application/x-www-form- urlencoded'}
		# 请求体出现正文body=param.encode('utf-8')
		self.conn.request(method='POST',url='/customer/add',body=param.encode('utf-8'),headers=header)
		resp = self.conn.getresponse().read().decode()
		print(resp)

if __name__ == '__main__':
	cm = CustomerManager()
	cm.login()
	cm.add()

3.利用多线程threading模拟多用户

from http.client import HTTPConnection
import threading

def stree_test():
	conn = HTTPConnection(host='localhost',port=8080)
	aram = 'username=admin&pas sword= admin123&verifycode=0000'
    header = {
   'Content-Type': ' application/x-Www-form-urlencoded '}
    conn.request(method='POST',url='/user/login',body=param,headers=hesder)
    resp = conn.getresponse().read().decode()
    if resp == 'login-pass':
    	print('登录测试--成功')
    else:
    	print('登陆测试--失败')
    conn.close()
    
if __name__ == '__main__':
	threading.Thread(target=stre_test).start()

4.采用封装断言

主文件client.py

import http.client
import common

class CustomerManage:
	def __init__(self):
		self.conn = http.client.HTTPCOnnection('localhost',8080)
		self.cookie = None
	def login(self):
		param = 'username=admin&password=admin123&verifycode=000O'
		header = {
   'Content-Type': 'application/x-www form-urlencoded'}
		self.conn.request(method='POST',url='/user/login',body=param,headers=header)
		# 读取响应的标题头信息
		response = self.conn.getresponse()
		self.cookie = response.getheader('Set-Cookie')

		resp = response.read().decode()
		common.assert_contain(resp,'login-pass','登录成功')
	def add(self):
		param ='customername=接口王&customerphone=13512356783&childsex=男&childdate=2019-06-29&creditkids=100&creditcloth=200'
		header = {
   'Content-Type': 'application/x-www-form-urlencoded',
                  'Cookie':self.cookie}
     	self.conn.request(method='POST',url='/costomer/add',body=param.encode(),headers=header)
     	resp = self.conn.getresponse().read().decode()
     	common.assert_contaion(resp,'add-successful','新增用户')
     
     def query(self):
     	param = 'customerphone=18&page=3 '
     	header = {
   'Content-Type': ' application/ x-www-form-urlencoded',
     					'Cookie':self.cookie}
     	self.conn.request(method='POST',url='/customer/search/,body=param,headers=header)
     	resp = self.conn.getresponse().read().decode()
     	print(resp)

if __name__ == '__main__':
	cm = CustomerManage()
	cm.login()
	cm.add()
	cm.query()

上下文均调用断言封装文件 common.py

import re

def assert_equal(actual,expect,case):
	if expect in actual:
		print('测试用例:%s的测试用例结果为:成功'%case)
	else:
		print('测试用例:%s的测试用例结果为:失败'%case)

def assert_contain(actual,expect,cace):
	if expect in actual:
		print('测试用例:%s的测试结果为:成功'%case)
	else:
		print('测试用例:%s的测试结果为:失败'%case)

def assert_true(actual,case):
	if actual == True:
		print('测试用例:%s的测试结果为:成功'%case)
	else:
		print('测试用例:%s的测试结果为:失败'%case)
	
def assert_re(strung, regex, case):
	result = re.match(regex,string)
	if result is None:
		print('测试用例:[%s]的测试结果为:失败'%case)
	else:
		print('测试用例:[%s]的测试结果为:失败'%case)

# 将post请求正文的key=value&key=value&key=value转换为字典
def post_2_dict(post):
	dict = {
   }
	list = post.split('&')
	for item in list:
		key = item.split('=')[0]
		value = item.split('=')[1]
		dict[key] = value
	return dict

5.数据库存取、JSON

主文件sell.py

import http.client, random
import json, re
import database
import common

class SellManage:
	def __init__(self):
		self.conn = http.client.HTTPConnection('localhost',8080)
		self.database = database.Database()
		self.header = {
   'Content-Type': 'application/x-www form-urlencoded'}
		self.goodinfo = None
	# 外部数据源完成数据驱动:List+Dict,XML,CSV,Excel,数据库表
	def login(self):
		param = 'username=admin&pa s sword=admin123&verifycode=000O'
		self.conn.request(method='POST',url='/login',body=param,headers=self.header)
		# 读取响应的头部信息,并将cookie值添加刀字典header中
		response = self.conn.getresponse()
		self.header['Coolie'] = response.getheader('Set-Cookie')
		
		resp = respsonse.read().decode()
		common.assert_contaion(resp,'login-pass', '登录系统')
	
	# 查询并断言
	def barcode(self):
		barcode = self.random_barcode()
		param = 'barcode=%s'%barcode
		self.conn.request(method='POST',url='/sell/barcode',body=param,headers=self.header)
		resp = self.conn.getresponse().read().decode()
		# 解析参数转换为字典
		list = eval(resp)
		result = (len(list
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yuno Wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值