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

创建订单

# 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. Git使用之submodule

    入职第一周,就因为clone项目而产生了很大的障碍,花了差不多三四个小时才定位问题并解决,记录一下. 一.问题 当我们在使用Git克隆项目的时候,无法克隆下来一个文件夹.记该文件夹为A,A在远程仓库是 ...

  2. 【Azure DevOps系列】什么是Azure DevOps

    DevOps DevOps是一种重视"软件开发人员(Dev)"和"IT运维技术人员(Ops)"之间沟通合作的文化,它促进开发和运营团队之间的协作,以自动化和可重 ...

  3. 搭建vue开发环境的步骤,六步完成

    搭建vue开发环境的步骤,其实也挺简单的,之前这环境的配置也困扰着我一:在搭建vue的开发环境之前,一定一定要先下载node.js,vue的运行是要依赖于node的npm的管理工具来实现,下载地址:h ...

  4. ceph scrub error解决方案

    参考链接:https://blog.csdn.net/u010317005/article/details/79242794 问题现象: 原因分析: 数据的不一致性(inconsistent)指对象的 ...

  5. 你真的了解 get 和 post 的区别么

    get 和 post 是两种最常用的 HTTP 请求方法,要说它们两个的区别,相必接触过 WEB 开发的人都能够说出一二. 如果我问你这个问题,你的内心充满了自信和喜悦.你可能已经写过无数个 GET ...

  6. [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).

    Linux下安装MySQL执行scripts/mysql_install_db --user=mysql脚本时,报错如下: Filling help tables...2019-12-24 16:46 ...

  7. 基于 abp vNext 微服务开发的敏捷应用构建平台 - 文章目录

    系列文章: <基于 abp vNext 微服务开发的敏捷应用构建平台 - 设计构想> [点击查看] <基于 abp vNext 微服务开发的敏捷应用构建平台 - 文章目录> [ ...

  8. A review of learning in biologically plausible spiking neural networks

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! Contents: ABSTRACT 1. Introduction 2. Biological background 2.1. Spik ...

  9. python格式化输出及大量案例

    python格式化输出符号及大量案例 1.格式化输出符号 python格式化输出符号 格式化符号 含义 %c 转化成字符 %r 优先使用repr()函数进行字符串转化 %s 转换成字符串,优先使用st ...

  10. springboot的常用注解

    1. @SpringBootApplication2. @Repository3. @Service4. @RestController5. @Controller6. @Component7. @R ...