python+unittest+excel 接口自动化测试(xlrd , xlsxwriter)

本文主要是介绍怎么把测试数据存放到excel,接口读取测试,然后将测试时结果写入excel

  1. excel处理
import xlrd
import xlsxwriter

class Excel:
    def __init__(self, mode, file):
        #读取excel
        if mode=="r":
            self.workbook = xlrd.open_workbook(file)
            #获取所有sheet
            self.sheet_names = self.workbook.sheet_names()
            #装在所有的数据
            self.list_data = []
        #写入excel
        elif mode=="w":
            self.workbook = xlsxwriter.Workbook(file)
    
    def read(self, sheet_name):
        sheet = self.workbook.sheet_by_name(sheet_name)
        #获取行数
        rows = sheet.nrows
        #根据行数读取
        for i in range(1,rows):
            #获取每行内容
            row_valus = sheet.row_values(i)
            #将每行添加到数据列表
            self.list_data.append(row_valus)
        return self.list_data

    def write(self, data, sheet_name):
        # 设置报告格式
        sheet = self.workbook.add_worksheet(sheet_name)
        # 每行的宽度
        sheet.set_column('A:Q', 30)
        cell_format = self.workbook.add_format({'bold': True})
        sheet.set_row(0, 20, cell_format)
        # 红色
        red = self.workbook.add_format({'bg_color': 'red', 'color': 'white'})
        # 绿色
        green = self.workbook.add_format({'bg_color': 'green', 'color': 'white'})
        for i in range(len(data)):
            data_keys = data[i].keys()
            for (j, key) in zip(range(len(data_keys)),data_keys):
                # 进行用例结果的背景颜色更改 不同状态的用例 不同颜色
                if data[i]["result"]=="fail":
                    sheet.write(i, j, str(data[i][key]), red)
                elif data[i]["result"] == 'pass':
                    sheet.write(i, j, str(data[i][key]), green)
                else:
                    sheet.write(i, j, str(data[i][key]))
        self.workbook.close()   #如果不关闭,则无法写入内容

2.有道词典爬虫认证

import requests
import hashlib
import time
import random

# var t = n.md5(navigator.appVersion),对应浏览器版本
t = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"

session = requests.Session()
def get_auth_data(keyword):
    bv = hashlib.md5(bytes(t,encoding="utf-8")).hexdigest()
    #b4046c447614dcbe06d949fe3062a42a
    # 70244e0061db49a9ee62d341c5fed82a
    r = str(int(round(time.time(),3)*1000))
    ts = r      #1585970420994
    i = ts + str(random.randint(1,10))
    salt = i #15859705441292
    sign = hashlib.md5(bytes("fanyideskweb" + keyword + salt +"Nw(nmmbP%A-r6U3EUn]Aj",encoding="utf-8")).hexdigest()
    return bv,ts,salt,sign

def login():
    headers = {"User-Agent": t}
    res = requests.get("http://fanyi.youdao.com/",headers=headers)
    cookie_list = []
    for cookie in res.cookies:
        cookie_list.append("%s=%s"%(cookie.name,cookie.value))
    headers["Content-Type"] = "application/x-www-form-urlencoded"
    headers["Referer"] = "http://fanyi.youdao.com/"
    headers["Cookie"] = ';'.join(cookie_list)
    session.headers.update(headers)
  1. 业务
from test import setUp
import json

def translate(data):
    test_result = {}
    test_result["tc"] = "%s_%s"%(data[0],data[1])
    bv,ts,salt,sign = setUp.get_auth_data(data[2])
    url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"
    req_data = {"i": data[2],
            "from": data[3],
            "to": data[4],
            "smartresult": "dict",
            "client": "fanyideskweb",
            "salt": salt,
            "sign": sign,
            "ts": ts,
            "bv": bv,
            "doctype": "json",
            "version": "2.1",
            "keyfrom": "fanyi.web",
            "action": "Y_BY_CLICKBUTTION"}
    res = setUp.session.post(url, data=req_data)
    try:
        assert res.status_code==int(data[6])
        #验证响应状态码
        assert res.status_code==int(data[6])
        #验证相应结果
        result = res.json()
        assert result["translateResult"][0][0]["src"]==data[2]
        assert result["translateResult"][0][0]["tgt"]==data[5]
        test_result["result"] = "pass"
    except:
        test_result["result"] = "fail"
    finally:
        print("-url:%s"%url)
        print("-request data:")
        print(req_data)
        print("-http code:%d"%res.status_code)
        print("-response content:")
        print(res.json())
        return test_result
       
  1. 测试用例
import unittest
from test import setUp
from test.Excel import Excel as EX
from test import business as BS
import time

class MyTest(unittest.TestCase):
    
    def setUp(self):
        #1. login
        setUp.login()
        self.r_data_excel = EX("r", "elements.xlsx")
        self.w_data_excel = EX("w", "results.xlsx")
        self.result_list = []
        
    def test_translate(self):
        #2.翻译
        #2.1 读取测试数据
        list_data = self.r_data_excel.read("translate")
        #2.2 翻译
        for data in list_data:
            print("==start test:%s_%s"%(data[0],data[1]))
            try:
                test_result = BS.translate(data)
                self.result_list.append(test_result)
            except:
                pass
            finally:
                print("==end test:%s_%s\n"%(data[0],data[1]))
                time.sleep(3)
    def tearDown(self):
        self.w_data_excel.write(self.result_list, "translate")
        
if __name__=="__main__":
    unittest.main()

测试数据

在这里插入图片描述
测试结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值