测试环境有个项目需要每天构造数据,来尽量保证测试环境和生产环境数据量保持一致。需要生成订单后商家接单完成,以下是代码,主要是用接口完成

创建订单

# coding=utf-8

import requests
import time
import uuid
import hashlib
import hmac
import urllib3
# from config import read_yaml urllib3.disable_warnings() def shunfeng():
# 时间戳
millis = "%d" % (time.time() * 1000) # 订单号
order_id = ''.join((str(uuid.uuid1()).split('-'))) url = 'https://test'
mid = 'test'
secret = 'test' sec_data = {"data": mid,
"data": 'HmacSHA256',
"data": '',
"data": millis,
"data": order_id,
"orderType": "",
"data": "",
"data": "WechatPay",
"data": "",
"data": "110.110.110.110",
"data": "https://test.com",
"data": "CNY",
"data": order_id} sec_data_str = ''
for k in sorted(sec_data):
sec_data_str += k + '=' + sec_data[k] + '&'
sec_data_str = sec_data_str[:-1]
print('\nsing排序后参数:\n'+sec_data_str) signature_str = hmac.new(secret.encode('utf-8'), sec_data_str.encode('utf-8'), digestmod=hashlib.sha256).digest()
sign = signature_str.hex().upper()
print('\nsign:\n' + sign) body_data = {"data": mid,
"data": 'HmacSHA256',
"data": '',
"data": millis,
"data": order_id,
"data": "",
"data": "",
"data": "WechatPay",
"data": "",
"data": "110.110.110.110",
"data": "https://test.com",
"data": "CNY",
"data": order_id,
"data": sign} body_str = ''
for i in body_data.items():
body_str += i[0] + '=' + i[1] + '&'
body_str = body_str[:-1]
print('\nbody参数:\n' + body_str) head = {"Content-Type": "application/x-www-form-urlencoded"} req = requests.post(url=url, data=body_str, headers=head)
print('\n请求url:\n' + req.url)
print('\n下单返回结果:' + req.text) if __name__ == '__main__':
shunfeng()

接收订单推送

# coding=utf-8

import urllib3
import re
from websocket import create_connection urllib3.disable_warnings() def wss(uid): url = 'wss://test'
ws = create_connection(url) ws.send('{"test":2,"tese":16,"test":1,"body":{"test":"test","test":"test","test":"1.0","test":"1.0"}}') while True: ws.send('{"test":5,"test":16,"test":2,"test":{"userId":' + '"' + uid + '"' + '}}')
send_data = ws.recv()
if 'test' in str(send_data): str1 = str(send_data).split('\\') str2 = str(str1).split(' '' ') str3 = ''.join(str(str2).split('\\')) str4 = re.sub("[\"\'[, ]", "", str3) str5 = re.findall(r'invoice:(.*?)=', str4) order_id = ''.join(str5) + '='
# print(order_id) return order_id if __name__ == '__main__':
wss('uid')

登陆-抢单-完成

import urllib3
import requests
import logging
import time
from web_wss import wss urllib3.disable_warnings() time_log = time.strftime('%Y-%m-%d %H_%M_%S', time.localtime(time.time()))
# logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(message)s')
logging.basicConfig(filename= 'result.log', filemode= 'w+', level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') def login():
list_uid = []
list_head = [] phone = phone login_header = {'User-Agent': 'test/1.0.0(build:test;ANDROID 9)',
'bndkey': 'test'} for line in phone:
try:
# requests.adapters.DEFAULT_RETRIES = 10
# s = requests.session()
# s.keep_alive = False sessionRequest = requests.session() # 登陆
app_login = {'account': '86,' + line,
'accountKind': '',
'passwd': 'test'}
r_login = sessionRequest.post(url=url_login, data=app_login, headers=login_header, verify=False, timeout=10)
# print(r_login.url) if '登录成功' in r_login.text:
logging.info(u'登陆成功: ' + line + ' - ' + r_login.json()['data']['uid'])
else:
logging.info(u'登陆失败: ' + r_login.text) # 请求头
uid = r_login.json()['data']['uid']
u_token = dict(r_login.headers)['utoken']
t_token = dict(r_login.headers)['ttoken']
head = {'User-Agent': 'test/1.0.0(build:test;ANDROID 7.1.1)',
'bndkey': 'test',
'utoken': u_token,
'ttoken': t_token} r_start = sessionRequest.post(url=url_open_take, data={'main': ''}, headers=head, verify=False, timeout=10)
if 'true' in r_start.text:
logging.info(u'接单开启成功: uid - ' + str(uid) + ' - ' + r_start.text)
else:
logging.info(u'接单开启失败: uid - ' + str(uid) + ' - ' + r_start.text) r_sell = requests.post(url=url_sell, data={'merchantDeposit': '', 'playerDeposit': ''}, headers=head, verify=False, timeout=10)
if 'true' in r_sell.text:
logging.info(u'卖币开启成功: uid - ' + str(uid) + ' - ' + r_sell.text)
else:
logging.info(u'卖币开启失败: uid - ' + str(uid) + ' - ' + r_sell.text) list_uid.append(uid)
list_head.append(head) logging.info(u'uid: ' + str(uid) + ' - utoken: ' + str(u_token) + ' - ttoken: ' + str(t_token) + '\n')
# logging.info(u'HEAD: ' + str(list_head) + '\n') except BaseException as msg:
logging.info(u'---ERROR:' + str(msg) + '\n' + '\n' + '\n') return list_uid, list_head def accomplishOrder():
list_data = login()
list_uid = list_data[0]
list_head = list_data[1] for uid, head in zip(list_uid, list_head):
try:
sessionRequest = requests.session() # list_order_id = []
# list_amount = [] try:
if wss(uid) is not None:
# 抢单
order_id_sec = wss(uid)
r_rob = sessionRequest.post(url=url_rob, data={'id': order_id_sec}, headers=head, verify=False, timeout=10)
logging.info(u'抢单: ' + r_rob.text) # 查询进行中订单
r_get_order = sessionRequest.get(url=url_run_order, headers=head, verify=False, timeout=10) if r_get_order.json()['data'] is not None:
order_data = r_get_order.json()
for i in range(len(r_get_order.json()['data'])):
order_id = order_data['data'][i]['id']
amount = order_data['data'][i]['amount']['reality'] # list_order_id.append(order_id)
# list_amount.append(amount)
# # logging.info('uid: ' + uid + ' - orderId: ' + order_id + '\n')
# return list_order_id, list_amount # 完成订单
r_pay = sessionRequest.post(url=url_pay, data={'id': order_id, 'amount': amount}, headers=head, verify=False, timeout=10)
if 'true' in r_pay.text:
logging.info(u'完成订单: uid - ' + uid + ' orderId: ' + order_id + '\n')
else:
logging.info(u'订单未完成: uid - ' + uid + r_pay.text)
else:
logging.info(u'暂时没有进行中订单: ' + 'uid: ' + uid) except BaseException as msg:
logging.info(u'---ERROR:' + str(msg) + '\n')
except BaseException as msg:
logging.info(u'--- ERROR:' + str(msg) + '\n') if __name__ == '__main__':
while True:
accomplishOrder()

python测试http、websocket接口的更多相关文章

  1. python测试基于websocket协议的即时通讯接口

    随着html5的广泛应用,基于websocket协议的即时通讯有了越来越多的使用场景,本文使用python中的websocket-client模块来做相关的接口测试 import webclient ...

  2. 关于python测试webservice接口的视频分享

    现在大公司非常流行用python做产品的测试框架,还有对于一些快速原型产品的开发也好,很好地支持OO编程,代码易读.Python的更新挺快的,尤其是第三方库. 对于测试人员,代码基础薄弱,用pytho ...

  3. python测试api接口

    在开发中,需要测试web-api的接口 spring mvc 使用单元测试非常方便,但是,受不了单元测试的启动速度.用python写了一个小脚本,用于测试接口, 测试脚本配置文件 api.yaml s ...

  4. jmeter 测试websocket接口(一)

    jmeter 测试websocket接口时,需要对jmeter添加测试websocket的jar包. 下载地址: https://download.csdn.net/download/qq_14913 ...

  5. python、java大作战,python测试dubbo接口

    很多小伙伴都反映公司要求测dubbo(dubbo是一个java的分布式开源框架)接口,不会写java代码,怎么测,能不能用python来调dubbo接口.当然是可以的了,最近研究了一下,很简单,分享给 ...

  6. python爬虫----爬取阿里数据银行websocket接口

    业务需求:爬取阿里品牌数据银行的自定义模块==>>>人群透视==>>>查看报告==>>数据 发现:数据通过websocket接口传递,此类型接口的详细理 ...

  7. 『动善时』JMeter基础 — 50、使用JMeter测试WebSocket接口

    目录 1.什么是WebSocket接口 2.为什么需要WebSocket 3.测试WebService接口前的准备 4.WebSocket Sampler组件界面详解 5.使用JMeter测试WebS ...

  8. 从零使用Python测试。Testing Using Python.

    0. 写在前面 本人使用Python测试已有多年,略有些皮毛经验.每次有新员工入职,都会从头教一遍如何入门上手使用Python进行测试.趁这段有空,整理成文档,也好方便后续新员工学习.文章如有不妥之处 ...

  9. 转载:python + requests实现的接口自动化框架详细教程

    转自https://my.oschina.net/u/3041656/blog/820023 摘要: python + requests实现的接口自动化框架详细教程 前段时间由于公司测试方向的转型,由 ...

  10. Python测试 ——开发工具库

    Web UI测试自动化 splinter - web UI测试工具,基于selnium封装. selenium - web UI自动化测试. mechanize- Python中有状态的程序化Web浏 ...

随机推荐

  1. Oracle用户授权

    一.用户授权 1)普通权限 grant ${autoType1, autoType2, autoType3, ...} to ${userName} identified by ${password} ...

  2. idea的热加载与热部署

    一:热加载与热部署     热部署的意思就是不用手动重启环境,修改类后,项目会自动重启.但是如果项目比较大,重启也需要耗时十几秒左右.     热加载意为不需要重新启动,修改了什么文件就重新加载什么文 ...

  3. 一个在交流群里讨论过两轮的问题,答案竟然跟一个 PEP 有关

    Python 中有没有办法通过类方法找到其所属的类? 这个问题看起来不容易理解,我可以给出一个例子: class Test: @xxx def foo(self): pass 现在有一个类和一个类方法 ...

  4. 利用C#实现OPC-UA服务端

    前言 最近接手了一个项目,做一个 OPC-UA 服务端?刚听到这个消息我是一脸懵,发自灵魂的三问“OPC-UA是什么?”.“要怎么做?”.“有什么用?”.我之前都是做互联网相关的东西,这种物联网的还真 ...

  5. js替换指定位置字符串

    var str='QWER';//替换WE newstr=replacepos(str,1,2,'XX'); console.log(newstr);//QXXR; function replacep ...

  6. 感谢 Vue.js 拯救我这个前端渣渣,让 PowerJob 有了管理后台界面

    本文适合有 Java 基础知识的人群 作者:HelloGitHub-Salieri HelloGitHub 推出的<讲解开源项目>系列. 对于大部分非前端程序员来说,写网页无疑是一件非常痛 ...

  7. 初学Linux (Linux_note)

    根目录:/ /root: 存放root用户相关文件 /home: 存放不同用户的相关文件 /bin: 存放常用命令的目录 /sbin: 要具有一定权限才可以使用的命令 /mnt: 默认挂载光驱和软驱的 ...

  8. Linux下启动、关闭SVN服务

    1.命令:ps -ef|grep svnserve,查看SVN是否允许,执行如下: 2.命令:svnserve -d -r /home/svn,启动SVN,/home/svn是SVN安装路径,执行如下 ...

  9. 给你项目加个Mock吧

    mockjs官网:http://mockjs.com/ 一.简介 1.什么是mock 拦截请求,生成随机数据. 2.mock的使用场景 当后端接口还未完成的时候,前端需要一些数据来写页面,此时就需要M ...

  10. Lambda 表达式推演全过程

    Java 的 Lambda 表达式推演过程: 第一步:正常的类实现(外部实现),new一个对象,然后重写方法实现 public class TestLambda3 { public static vo ...