ネストされた辞書を一覧表示します。 Excelのurl、test_method、data、titleなどはすべてキーです。url、test_method、data、titleの下のデータは、取得する値、つまりKeyとvalueの形式です。
ログインする
最初にrequests.pyファイルを作成し、リクエストモジュールでインターフェイスを呼び出します。
import requests
classHttpRequest:
def http_request(self,url,data,http_method,cookie=None):try:if http_method.upper()=='POST':
res=requests.post(url,data,cookies=cookie)
elif http_method.upper()=='POST':
res=requests.post(url,data,cookies=cookie)else:print("入力したリクエスト方法が正しくありません")
except Exception as e:print("リクエストでエラーが報告されました:{0}".format(e))
raise e
return res#結果を返す
if __name__ =='__main__':
# 登録済み
register_url='http://api.nnzhp.cn/api/user/add_stu'
register_data={"name":"niuhanyang","grade":"蠍座","phone":'18614711314'}
# ログインする
login_url='http://api.nnzhp.cn/api/user/login'
login_data={"username":"niuhanyang","passwd":'aA123456'}
# 充電する
recharge_url='http://api.nnzhp.cn/api/user/gold_add'
recharge_data={"stu_id":"2170","gold":'1'}
login_res=HttpRequest().http_request(login_url,login_data,'post')
recharge_res=HttpRequest().http_request(recharge_url,recharge_data,'post',login_res.cookies)print("充電結果:{}".format(recharge_res.json()))
ファイルtest_data_xiejinjieguo_jiacaseid.xlsx
ファイルdo_excel_xiejinjieguo_jiacaseid.py
from openpyxl import load_workbook
classDoExcel:
def get_data(self,file_name,sheet_name):
wb=load_workbook(file_name)
sheet=wb[sheet_name]
test_data=[]for i inrange(2,sheet.max_row+1):#
print('sheet.max_行は:',sheet.max_row)
row_data={}
row_data['case_id']= sheet.cell(i,1).value #列1行2
row_data['url']=sheet.cell(i,2).value
row_data['data']= sheet.cell(i,3).value
row_data['title']= sheet.cell(i,4).value
row_data['http_method']= sheet.cell(i,5).value
test_data.append(row_data)return test_data
# 結果をExcelに書き込む
def write_back(self,file_name,sheet_name,i,value):#具体的にデータを書き戻す
wb=load_workbook(file_name)
sheet=wb[sheet_name]
sheet.cell(i,6).value=value
wb.save(file_name)#結果を保存
if __name__ =='__main__':
test_data=DoExcel().get_data("../test_data/test_data_xiejinjieguo_jiacaseid.xlsx",'login')print(test_data)
# エラーメッセージ:そのようなファイルまたはディレクトリはありません:'test_data_xiejinjieguo_jiacaseid.xlsx'相対パスと絶対パス
# Excelの書き込み操作を伴う場合は、必ずExcelをオフにしてください。
ファイルrun_xiejinjieguo_jiacaseid.py
# コードを実行するための入り口
from tools.http_request import HttpRequest
from tools.do_excel_xiejinjieguo_jiacaseid import DoExcel
def run(test_data):#リストネスト辞書のデータ形式は次のとおりです。
for item in test_data:print("テストされているユースケースは{0}".format(item['title']))
res =HttpRequest().http_request(item['url'],eval(item['data']),item['http_method'])#トラバース,値
print("リクエストの結果は次のとおりです。{0}".format(res.text))DoExcel().write_back("test_data/test_data_xiejinjieguo_jiacaseid.xlsx",'login', item['case_id']+1,str(res.text))#item['case_id']行数を示します
# item['case_id']+1は2行目を意味します
test_data=DoExcel().get_data("test_data/test_data_xiejinjieguo_jiacaseid.xlsx",'login')print('それは読む:',test_data)run(test_data)'''
エラー:
raise ValueError("Cannot convert {0!r} to Excel".format(value))
ValueError: Cannot convert {'error_code':0,'login_info':{'login_time':'20200211084505','sign':'748fc064f1e33a00fad24b2600381c72','userId':2170}} to Excel
ヒントをExcelに書き込むことはできず、数字と文字列のみを書き込むことができます。その後、変換を強制してstrを追加します。
'''
# iは行、jは列です
作成されたrequests.py、ファイルtest_data_xiejinjieguo_jiacaseid.xlsx、ファイルdo_excel_xiejinjieguo_jiacaseid.py、ファイルrun_xiejinjieguo_jiacaseid.py、実行中のファイルrun_xiejinjieguo_jiacaseid.py
出力は次のとおりです。
ログインする
ファイル
test_data_xiejinjieguo_bujiacaseid.xlsx
ファイル
do_excel_xiejinjieguo_bujiacaseid.py
from openpyxl import load_workbook
classDoExcel:
def get_data(self,file_name,sheet_name):
wb=load_workbook(file_name)
sheet=wb[sheet_name]
test_data=[]for i inrange(2,sheet.max_row+1):#max_row+1は、2345が4つのユースケースを実行することを意味します。1を追加しない場合、実行されるユースケースは1つ少なくなります。
row_data={}
row_data['url']=sheet.cell(i,1).value#最初の列、2番目の行
row_data['data']= sheet.cell(i,2).value
row_data['title']= sheet.cell(i,3).value
row_data['http_method']= sheet.cell(i,4).value
test_data.append(row_data)return test_data
# 結果をExcelに書き込む
def write_back(self,file_name,sheet_name,i,value):#具体的にデータを書き戻す
wb=load_workbook(file_name)
sheet=wb[sheet_name]
sheet.cell(i,5).value=value
wb.save(file_name)#結果を保存
if __name__ =='__main__':
test_data=DoExcel().get_data("../test_data/test_data_xiejinjieguo_bujiacaseid.xlsx",'login')print(test_data)
# No such file or directory:'test_data_xiejinjieguo_jiacaseid.xlsx'相対パスと絶対パス
# Excelの書き込み操作を伴う場合は、必ずExcelをオフにしてください。
ファイルrun_xiejinjieguo_bujiacaseid.py
# コードを実行するための入り口
from tools.http_request import HttpRequest
from tools.do_excel_xiejinjieguo_bujiacaseid import DoExcel
def run(test_data):#リストネスト辞書のデータ形式は次のとおりです。
for e inrange(len(test_data)):#範囲は頭を取りますが、尾は取りません.4つの数字がある場合、それは0、1、2、3です。 eは、リスト内の要素の数を表します。 4つの要素、長さは4です。
# それは0、1、2、3の3つの要素です
# 0から開始し、インデックスに従って値を取得します。
print("テストされているユースケースは次のとおりです。{0}".format(test_data[e]['title']))
res =HttpRequest().http_request(test_data[e]['url'],eval(test_data[e]['data']),test_data[e]['http_method'])#
print("リクエストの結果は次のとおりです。{0}".format(res.json()))DoExcel().write_back("test_data/test_data_xiejinjieguo_bujiacaseid.xlsx",'login', e+2,str(res.json()))#e+2は2行目を意味します
test_data=DoExcel().get_data("test_data/test_data_xiejinjieguo_bujiacaseid.xlsx",'login')run(test_data)
ファイルrequests.pyとファイルtest_data_xiejinjieguo_bujiacaseid.xlsxが作成されました。
ファイルdo_excel_xiejinjieguo_bujiacaseid.py、ファイルrun_xiejinjieguo_bujiacaseid.py、実行ファイルrun_xiejinjieguo_bujiacaseid.py
出力は次のとおりです。
ファイルtest_data_xiejinjieguo_zhuce.xlsx
ファイルhttp_request_xiejinjieguo_zhuce.py
import requests
classHttpRequest:
def http_request(self,url,data,http_method,cookie=None):try:if http_method.upper()=='POST':
res=requests.post(url,json=data,cookies=cookie)#fromdataを指定しない場合、jsonはjson形式でのみ渡すことができます。
# インターフェイスはjson形式であり、データを指定する必要があるため、jsonと記述されます。=data
elif http_method.upper()=='POST':
res=requests.post(url,json=data,cookies=cookie)else:print("入力したリクエスト方法が正しくありません")
except Exception as e:print("リクエストでエラーが報告されました:{0}".format(e))
raise e
return res#結果を返す
if __name__ =='__main__':
# 登録済み
register_url='http://api.nnzhp.cn/api/user/add_stu'
register_data={"name":"niuhanyang","grade":"蠍座","phone":'18614711314'}
# ログインする
login_url='http://api.nnzhp.cn/api/user/login'
login_data={"username":"niuhanyang","passwd":'aA123456'}
# 充電する
recharge_url='http://api.nnzhp.cn/api/user/gold_add'
recharge_data={"stu_id":"2170","gold":'1'}
login_res=HttpRequest().http_request(login_url,login_data,'post')
recharge_res=HttpRequest().http_request(recharge_url,recharge_data,'post',login_res.cookies)print("充電結果:{}".format(recharge_res.json()))
ファイルdo_excel_xiejinjieguo_zhuce.py
from openpyxl import load_workbook
classDoExcel:
def get_data(self,file_name,sheet_name):
wb=load_workbook(file_name)
sheet=wb[sheet_name]
test_data=[]for i inrange(2,sheet.max_row+1):#
row_data={}
row_data['case_id']= sheet.cell(i,1).value #列1行2
row_data['url']=sheet.cell(i,2).value
row_data['data']= sheet.cell(i,3).value
row_data['title']= sheet.cell(i,4).value
row_data['http_method']= sheet.cell(i,5).value
test_data.append(row_data)return test_data
# 結果をExcelに書き込む
def write_back(self,file_name,sheet_name,i,value):#具体的にデータを書き戻す
wb=load_workbook(file_name)
sheet=wb[sheet_name]
sheet.cell(i,6).value=value
wb.save(file_name)#結果を保存
if __name__ =='__main__':
test_data=DoExcel().get_data("../test_data/test_data_xiejinjieguo_zhuce.xlsx",'login')print(test_data)
ファイルrun_xiejinjieguo_zhuce.py
# コードを実行するための入り口
from tools.http_request_xiejinjieguo_zhuce import HttpRequest
from tools.do_excel_xiejinjieguo_zhuce import DoExcel
def run(test_data):#リストネスト辞書のデータ形式は次のとおりです。
for item in test_data:print("テストされているユースケースは:{0}".format(item['title']))
res =HttpRequest().http_request(item['url'],eval(item['data']),item['http_method'])#トラバース,値
print("リクエストの結果は次のとおりです。{0}".format(res.json()))DoExcel().write_back("test_data/test_data_xiejinjieguo_zhuce.xlsx",'register', item['case_id']+1,str(res.json()))#item['case_id']表示される行数
# item['case_id']+1は2行目を意味します
test_data=DoExcel().get_data("test_data/test_data_xiejinjieguo_zhuce.xlsx",'register')run(test_data)
作成されたファイルtest_data_xiejinjieguo_zhuce.xlsx、ファイルhttp_request_xiejinjieguo_zhuce.py、ファイルdo_excel_xiejinjieguo_zhuce.py、ファイルrun_xiejinjieguo_zhuce.py、実行ファイルrun_xiejinjieguo_zhuce.py
出力は次のとおりです。
ファイル
test_data_xiejinjieguo_chongzhi.xlsx
ファイルhttp_request_xiejinjieguo_chongzhi.py
import requests
classHttpRequest:
def http_request(self,url,data,http_method,cookie=None):try:if http_method.upper()=='POST':
res=requests.post(url,data,cookies=cookie)#fromdataを指定しない場合、jsonはjson形式でのみ渡すことができます。
# インターフェイスはjson形式であり、データを指定する必要があるため、jsonと記述されます。=data
elif http_method.upper()=='POST':
res=requests.post(url,data,cookies=cookie)else:print("入力したリクエスト方法が正しくありません")
except Exception as e:print("リクエストでエラーが報告されました:{0}".format(e))
raise e
return res#結果を返す
if __name__ =='__main__':
# 登録済み
# register_url='http://api.nnzhp.cn/api/user/add_stu'
# register_data={"name":"niuhanyang","grade":"蠍座","phone":'18614711314'}
# ログインする
login_url='http://api.nnzhp.cn/api/user/login'
login_data={"username":"niuhanyang","passwd":'aA123456'}
# 充電する
recharge_url='http://api.nnzhp.cn/api/user/gold_add'
recharge_data={"stu_id":"2170","gold":'1'}
login_res=HttpRequest().http_request(login_url,login_data,'post')
recharge_res=HttpRequest().http_request(recharge_url,recharge_data,'post',login_res.cookies)print("充電結果:{}".format(recharge_res.text))
ファイルdo_excel_xiejinjieguo_chongzhi.py
from openpyxl import load_workbook
classDoExcel:
def get_data(self,file_name,sheet_name):
wb=load_workbook(file_name)
sheet=wb[sheet_name]
test_data=[]for i inrange(2,sheet.max_row+1):#
row_data={}
row_data['case_id']= sheet.cell(i,1).value #列1行2
row_data['url']=sheet.cell(i,2).value
row_data['data']= sheet.cell(i,3).value
row_data['title']= sheet.cell(i,4).value
row_data['http_method']= sheet.cell(i,5).value
test_data.append(row_data)return test_data
# 結果をExcelに書き込む
def write_back(self,file_name,sheet_name,i,value):#具体的にデータを書き戻す
wb=load_workbook(file_name)
sheet=wb[sheet_name]
sheet.cell(i,6).value=value
wb.save(file_name)#結果を保存
if __name__ =='__main__':
test_data=DoExcel().get_data("../test_data/test_data_xiejinjieguo_chongzhi.xlsx",'login')print(test_data)
run_xiejinjieguo_chongzhi.pyファイルはここでグローバル変数を使用します
# コードを実行するための入り口
from tools.http_request_xiejinjieguo_chongzhi import HttpRequest
from tools.do_excel_xiejinjieguo_chongzhi import DoExcel
COOKIE=None
def run(test_data,sheet_name):#リストネスト辞書のデータ形式は次のとおりです。
global COOKIE
for item in test_data:print("テストされているユースケースは:{0}".format(item['title']))
res =HttpRequest().http_request(item['url'],eval(item['data']),item['http_method'],COOKIE)#トラバース,値
print(item['data'])if res.cookies:
COOKIE=res.cookies
print("リクエストの結果は次のとおりです。{0}".format(res.text))DoExcel().write_back("test_data/test_data_xiejinjieguo_chongzhi.xlsx", sheet_name, item['case_id']+1,str(res.text))#item['case_id']表示される行数
# item['case_id']+1は2行目を意味します
test_data=DoExcel().get_data("test_data/test_data_xiejinjieguo_chongzhi.xlsx",'recharge')run(test_data,'recharge')'''
エラー:
raise ValueError("Cannot convert {0!r} to Excel".format(value))
ValueError: Cannot convert {'error_code':0,'login_info':{'login_time':'20200211084505','sign':'748fc064f1e33a00fad24b2600381c72','userId':2170}} to Excel
ヒントをExcelに書き込むことはできず、数字と文字列のみを書き込むことができます。その後、変換を強制してstrを追加します。
'''
# iは行、jは列です
ファイルtest_data_xiejinjieguo_chongzhi.xlsxが作成されました。
ファイルhttp_request_xiejinjieguo_chongzhi.py、
ファイルdo_excel_xiejinjieguo_chongzhi.py、
ファイルrun_xiejinjieguo_chongzhi.py、ファイルrun_xiejinjieguo_chongzhi.pyを実行します
出力は次のとおりです。
ファイルhttp_request_xiejinjieguo_fanshe.py
import requests
classHttpRequest:
def http_request(self,url,data,http_method,cookie=None):try:if http_method.upper()=='POST':
res=requests.post(url,data,cookies=cookie)#fromdataを指定しない場合、jsonはjson形式でのみ渡すことができます。
# インターフェイスはjson形式であり、データを指定する必要があるため、jsonと記述されます。=data
elif http_method.upper()=='POST':
res=requests.post(url,data,cookies=cookie)else:print("入力したリクエスト方法が正しくありません")
except Exception as e:print("リクエストでエラーが報告されました:{0}".format(e))
raise e
return res#結果を返す
if __name__ =='__main__':
# 登録済み
# register_url='http://api.nnzhp.cn/api/user/add_stu'
# register_data={"name":"niuhanyang","grade":"蠍座","phone":'18614711314'}
# ログインする
login_url='http://api.nnzhp.cn/api/user/login'
login_data={"username":"niuhanyang","passwd":'aA123456'}
# 充電する
recharge_url='http://api.nnzhp.cn/api/user/gold_add'
recharge_data={"stu_id":"2170","gold":'1'}
login_res=HttpRequest().http_request(login_url,login_data,'post')
recharge_res=HttpRequest().http_request(recharge_url,recharge_data,'post',login_res.cookies)print("充電結果:{}".format(recharge_res.text))
ファイルdo_excel_xiejinjieguo_fanshe.py
from openpyxl import load_workbook
classDoExcel:
def get_data(self,file_name,sheet_name):
wb=load_workbook(file_name)
sheet=wb[sheet_name]
test_data=[]for i inrange(2,sheet.max_row+1):#
row_data={}
row_data['case_id']= sheet.cell(i,1).value #列1行2
row_data['url']=sheet.cell(i,2).value
row_data['data']= sheet.cell(i,3).value
row_data['title']= sheet.cell(i,4).value
row_data['http_method']= sheet.cell(i,5).value
test_data.append(row_data)return test_data
# 結果をExcelに書き込む
def write_back(self,file_name,sheet_name,i,value):#具体的にデータを書き戻す
wb=load_workbook(file_name)
sheet=wb[sheet_name]
sheet.cell(i,6).value=value
wb.save(file_name)#結果を保存
if __name__ =='__main__':
test_data=DoExcel().get_data("../test_data/test_data_xiejinjieguo_chongzhi.xlsx",'login')print(test_data)
ファイルget_cookie.py
# 反射:いつ、どこでも、クラス名を渡すだけで、それが可能になります。
classGetCookie:
Cookie=None
# setattr(GetCookie,'Cookie','123456')#属性の設定属性値の設定
# print(hasattr(GetCookie,'Cookie'))#has属性は、この属性があるかどうかを決定します
# delattr(GetCookie,'Cookie')#属性の削除この属性の削除
# print(getattr(GetCookie,'Cookie'))#属性を取得属性値を取得
ファイルrun_xiejinjieguo_fanshe.py
# コードを実行するための入り口
from tools.http_request_xiejinjieguo_fanshe import HttpRequest
from tools.do_excel_xiejinjieguo_fanshe import DoExcel
from tools.get_cookie import GetCookie
def run(test_data,sheet_name):#リストネスト辞書のデータ形式は次のとおりです。
for item in test_data:print("テストされているユースケースは:{0}".format(item['title']))
res =HttpRequest().http_request(item['url'],eval(item['data']),item['http_method'],getattr(GetCookie,'Cookie'))#トラバース,値
print(item['data'])if res.cookies:setattr(GetCookie,'Cookie',res.cookies)#反射
# リフレクションは現在のファイルの実行時に有効になり、属性値は次に実行されたときに再生成されます。
print("リクエストの結果は次のとおりです。{0}".format(res.text))DoExcel().write_back("test_data/test_data_xiejinjieguo_chongzhi.xlsx", sheet_name, item['case_id']+1,str(res.text))#item['case_id']表示される行数
# item['case_id']+1は2行目を意味します
test_data=DoExcel().get_data("test_data/test_data_xiejinjieguo_chongzhi.xlsx",'recharge')run(test_data,'recharge')
test_data_xiejinjieguo_chongzhi.xlsx、ファイルhttp_request_xiejinjieguo_fanshe.py、
ファイルdo_excel_xiejinjieguo_fanshe.py、ファイルget_cookie.py、
ファイルrun_xiejinjieguo_fanshe.py、ファイルrun_xiejinjieguo_fanshe.pyを実行します
出力は次のとおりです。
登録インターフェースは辞書タイプで送信されるため、デフォルトは json.dumps()
を使用したフォーム送信です。
import requests
import json
register_url='http://api.nnzhp.cn/api/user/add_stu'
register_data={"name":"niuhanyang","grade":"蠍座","phone":'18614711314'}
res=requests.post(register_url,data=json.dumps(register_data))print("jsonの解析結果",res.json())'''
投稿リクエスト方法:投稿(url,data=None,json=None,**kwargs)
dataはpostメソッドの正式なパラメータです
register_データは実際のパラメータです,データは正式なパラメータです
あなたの辞書データをこの投稿のパラメータに割り当てることとして理解されています
これは辞書タイプの送信です。デフォルトは、jsonを使用したフォーム送信です。.dumps()
json.dumps()フォームを転送するのではなく、jsonを使用します.dumps()ここでのみ適用されます。
'''
login_url='http://api.nnzhp.cn/api/user/login'
login_data={"username":"niuhanyang","passwd":'aA123456'}
login_res=requests.post(login_url,login_data)print("jsonの解析結果",login_res.json())
# jsonを使用する場合()分析のために?返すデータがこのタイプの場合のみ。
recharge_url='http://api.nnzhp.cn/api/user/gold_add'
recharge_data={"stu_id":"2170","gold":'1'}
# header={"User-Agent":"Mozilla/5.0"}
# recharge_res=requests.post(recharge_url,recharge_data,cookies=login_res.cookies,headers=header)
# print("jsonの解析結果",recharge_res.json())
# print("リクエストヘッダー:",recharge_res.request.headers)'''
一般的な問題:
1. アドレスが間違っているか、アドレスにスペースが含まれています。
2. 結果はjsonにすることはできません()ある方法で分析しても問題が見つからない場合は、テキストを使用して分析してください。
3. エラーメッセージ:ValueError:Expecting value:line 1 colunm 1(char 0)
このプロンプトが表示されたら、アドレスは間違いなく間違っています。
'''
# 拡張ポイント:
# セッションの下ですべてのリクエストを保持します
# s=requests.session()#セッションを作成しました
# login_res=s.post(login_url,login_data)#getリクエストの場合は、パラメータを追加します=,詳細については、get source codeを参照してください。位置パラメータは1つしかないため、自分で位置パラメータを追加する必要があります。
# recharge_res=s.post(recharge_url,recharge_data)
# print("再充電の結果は次のとおりです。",recharge_res.json())
セッション:セッションの有効性を確保します。
Cookie:同じユーザーによって開始されたリクエストであることをサーバーに証明してから、すべてのリクエストにCookieを追加する必要があります。
トークン:認証。不正アクセスを防止します。
キー:承認、キーのみにアクセスできます。
jsonは文字列で、dictはデータ構造です。
実際の効果:
json.loads()
は、JSON文字列をPython辞書形式に変換します。
json.dumps()
は、python辞書をJSON文字列に変換します。
投稿リクエストには、一般的に4つのタイプがあります。
1、 application / x-www-form-urlencodedブラウザのネイティブフォーム
2、 multipart/form-data
3、 application/json
4、 text / xmlテキスト形式
したがって、要求されたコンテンツタイプを追加する必要がありますContent-Type:XXXXX
def excel_to_list(data_file, sheet):
data_list =[] #空のリストを作成して、すべてのデータをロードします
wb = xlrd.open_workbook(data_file) #オープンエクセル
sh = wb.sheet_by_name(sheet) #ワークブックを入手する
header = sh.row_values(0) #ヘッダー行データを取得する
for i inrange(1, sh.nrows): #ヘッダー行をスキップして、2行目からデータのフェッチを開始します
d =dict(zip(header, sh.row_values(i))) #タイトルとデータの各行を辞書にまとめます
data_list.append(d)return data_list #ネストされた辞書形式を一覧表示します。各要素は辞書です。
今日遭遇したピット:
コードが間違っている限り、エラーが報告され、excelに空白行があります。コードに戻るときは、空白行を削除することを忘れないでください。
オンラインインターフェイスにバグがあるか、インターフェイスドキュメントがjson形式で記述されている可能性がありますが、実際にはjson形式とhtml形式があります。
jsonタイプの戻り値のみがjsonをサポートし、htmlおよびjsonはここではサポートされません。 html、json()形式、テキスト形式を使用して取得できます。
このWebサイト(http://doc.nnzhp.cn/index.php?s=/6&page_id=11)のリチャージインターフェイスはjson形式ではありませんが、jsonおよびhtml形式では、インターフェイスのドキュメントが間違っています。テキスト形式でのみご利用いただけます!
不注意にしないでください。右クリックしてpycharm内のファイルをコピーおよびコピーすると、コードが変更される可能性があります。
excelのurl、http_method、title、case_idの下の値には、二重引用符はありません。データにコピーされた値に独自の二重引用符があることを除いて、二重引用符はありません。引用符を追加する必要はありません。
Excelの値は、Excelの形式に従って厳密に並べ替える必要があり、右側に数字を、左側に他の形式の値を余分なスペースなしで並べ替える必要があることがわかっています。
**注:Excelの書き込み操作を伴う場合は、Excelをオフにする必要があります。 ****
Recommended Posts