一、步骤
1.先从数据库表user_login,查询出正常状态的客户,并导出至excel中
2.思路:模拟客户下单流程
(1)首先客户需要登录到电商平台,登录的参数有用户名、密码,所需的有效数据已导出至excel,所以,此处的两个参数需要从表格中去取,用到xlrd模块读取数据
(2)客户下单,需要先查询到商品的价格,需请求“查找价格”的接口,得到某个商品的价格
(3)提交订单前提是购物车中有该商品,所以要将查询到的商品加入到购物车,请求加入购物车的接口
(4)下单需要指定某个商品,即查找到购物车里某个商品下单(得到购物车列表的指定id下单)
(5)提交订单,返回订单信息
3.代码实现
(1)读取excel部分
# coding:utf-8
import xlrd
class ExcelUtil:
def __init__(self, excel_path, sheet_name):
self.data = xlrd.open_workbook(excel_path)
self.table = self.data.sheet_by_name(sheet_name)
# 获取第一行作为key值
self.keys = self.table.row_values(0)
# 获取总行数
self.rowNum = self.table.nrows
# 获取总列数
self.colNum = self.table.ncols
def dict_data(self):
if self.rowNum <= 1:
print("总行数小于1")
else:
r = [] # 存放读取数据
j = 1
for i in range(self.rowNum - 1):
s = {} # 存放每一行的键值对
# 从第二行取对应的value值
values = self.table.row_values(j)
for x in range(self.colNum):
s[self.keys[x]] = values[x]
r.append(s)
j += 1
return r
(2)提交订单脚本
# coding:utf-8
from readLoginData import ExcelUtil
import requests
class InsertOrders:
# 初始化设置session和headers
def __init__(self):
self.session = requests.session()
# headers 信息用fiddler抓包获取
self.headers = {
"Referer": "http://192.168.x.xxx/xxx/xxx/login.html",
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"
}
# 登录电商平台,参数从表格取出,表格数据为数据库查询出符合购买要求的客户登录id和密码
def login(self, username, password):
url = "http://192.168.x.xxx/xxx/xxx/login" # 登录url
data = {
"USERNAME": username,
"PASSWORD": password
}
print(username,password)
login_result = self.session.post(url, data=data,headers=self.headers)
return login_result.json()
# 查找价格
def findProjectPrice(self):
find_price_url = "http://192.168.x.xxx/xxx/xxx/findCommodityDetail" # 查找价格url
data = {
"modelId": "pigiron_Z14",
"syFacilityTypeId": "CK001",
"priceListItemId": "10000",
"partyId": "12674",
"_init_modelId": "pigiron_Z14",
"_init_partyId": "12674",
"_init_syFacilityTypeId": "CK001"
}
find_price_result = self.session.post(find_price_url, data=data,headers=self.headers).json()
cashPrice = find_price_result["baseInfo"]["cashPrice"]
return cashPrice
# 加入购物车
def addShopCar(self):
shop_car_url = "http://192.168.x.xxx/xxx/xxx/insertShopCar" # 加入购物车url
price = self.findProjectPrice()
data = {
"status":"LAST",
"priceListItemId":"10000",
"price":price,
"payMethod":"PAYTYPE1",
"otherMethod":"",
"sendMethod":"CK001",
"getMethod":"SETTLEMENT1",
"buyMethod":"CARTYPE001/1",
"totalCarNum":"1",
"totalNum":"32"
}
addshopcar_result = self.session.post(shop_car_url, data=data,headers=self.headers).json()
shop_car_id = addshopcar_result["shopCarId"]
return shop_car_id
# 提交订单
def insertOrders(self):
insert_order_url="http://192.168.x.xxx/xxx/xxx/insertOrder" # 提交订单url
json_arr_str = self.addShopCar()
data = {
"useDisStyle":"NO",
"jsonArrStr":"["+"'%s'"%json_arr_str+"]",
"futureDate":"2018-11-12"
}
insertorder_result = self.session.post(insert_order_url, data=data,headers=self.headers).json()
return insertorder_result
if __name__ == '__main__':
username_list = ExcelUtil("D:\\Users\suner\sun\login.xlsx", "Sheet1").dict_data()
"""
数据为字典的列表{'password': '123456', 'username': '10011'},, {'password': '123456', 'username': '10021'}
"""
print(username_list)
# 循环取出列表中的每一个值(字典),获取它的用户名和密码
for user_info in username_list:
username = user_info["username"]
password = user_info["password"]
order = InsertOrders()
order.login(username, password)
result = order.insertOrders()
result_code = result['orderCode']
print("客户下单成功:{}".format(username), "订单编号为:{}".format(result_code))
(3)结果