Python 参数化读取Excel登录,获取Token写入文件

自动化测试经常遇到数据驱动测试,例如读取2000个账号和密码,进行自动化登录获取token。

***********************************************************************************************

第1步:学习Python读取Excel文件

'''

Created on 2018年7月13日

@author:  Yvon_₯㎕ζ๓

'''

import xlrd

excel = xlrd.open_workbook(u'测试账号.xlsx')

# 通过索引顺序获取

table = excel.sheets()[0]

print(table)

print(type(table))

# 获取行数

nrows = table.nrows

print('总行数:',nrows)

print ("该文档有%i行" %nrows)

# 获取列数

ncols = table.ncols

print('该文档有%i列'%ncols)

#获取整行或整列的值

'''row_values = table.row_values(i) , col_values = table.col_values(j) , 其中i为行号, j为列号# 行号、列号索引从0开始'''

row_values = table.row_values(5)

col_values = table.col_values(1)

#获取指定单元格数据

'''value = table.cell(i, j).value , i-行号, j-列号'''

# 例如获取第2行、第1列的数据

value = table.cell(1, 0).value

print(value)

# 遍历打印所有行数据

for i in range(1, nrows):

    #每一行数据

    print (table.row_values(i))

#     print (table.row_values(i)[0])


***********************************************************************************************

第2步:学习Python登录接口

'''

Created on 2018年7月13日

@author:  Yvon_₯㎕ζ๓

'''

import requests

header = {

        "User-Agent": "Android Device","App-Version": "1.2.3","App-Channel": "200001001",

        "Connection": "keep-alive","Content-Type":"application/json",

        "Content-Length": "46","Host":"XXX.com"}

params = {"password":"aaaaaa","username":"15610000101"}       

login_url = 'https://XXXXXXXXXXXX'

login_ret = requests.post(url=login_url, headers = header, json = params,verify=False)

# login_ret = requests.post(url, data, json)

print(login_ret)

# 这里token在返回的json里,可以直接提取

result = login_ret.json()

# token = login_ret.json()["token"]

print(result)


***********************************************************************************************

第3步: 封装Excel读取

'''

Created on 2018年7月13日

@author:  Yvon_₯㎕ζ๓

'''

import xlrd

class Du_Excel:

    def __init__(self,excel_path):

        self.data = xlrd.open_workbook(excel_path)

        self.table = self.data.sheets()[0]

        # 获取行数

        self.nrows = self.table.nrows 

    def login_data(self):

        # 从第二行开始遍历数据,存入一个list中

        test_data = []       

        for i in range(1, self.nrows):

            test_data.append(self.table.row_values(i))

        return test_data


if __name__ == "__main__":

    excel_path = u'微竞猜测试账号.xlsx'

    data = Du_Excel(excel_path)

    print (data.login_data())

***********************************************************************************************

最后: 调用封装的Exce,参数化登录接口

'''

Created on 2018年7月13日

@author:  Yvon_₯㎕ζ๓

'''

import requests,unittest

from fz_Excel import Du_Excel

class Login_Get_Token(unittest.TestCase):

    def setUp(self):

        self.header = {'Content-Type':'application/json;charset=UTF-8',

             "App-Channel": "200001001",

             "App-Version": "1.2.3","Host":"XXX.com"  }

        self.url = 'https://XXXXXXXXXXX'

    def get_Token(self):

        excel_path = u'测试账号.xlsx'

        data = Du_Excel(excel_path)

        r = data.login_data()

        with open('token.txt','a+') as f:

            f.seek(0)

            f.truncate()

        for d in r:#遍历上面步骤得到的用户名和密码的列表

#             print(d)

            self.params ={'password':d[1],'username':d[0]}

            self.r=requests.post(url=self.url,json = self.params,headers = self.header,verify=False)

            result = self.r.json()

            print(result)

            self.assertEqual(result['code'],200)

            result_token = self.r.json()["data"]

            with open('token.txt','a+') as f1:

                f1.write(result_token +'\n')

    def tearDown(self):

        pass

if __name__=='__main__':

    testunit = unittest.TestSuite()

    testunit.addTest(Login_Get_Token('get_Token'))

    runner=unittest.TextTestRunner()

    runner.run(testunit)


备注:涉及的知识点说明如下

  1、接口requests.post时,如果报port=443,加上verify=False

  2、每次生成的token更新覆盖旧的token文件,需要先清空token文件内容,再循环把获取的token文件写入保存。

  3、如果Excel读取超过3500行,建议分两个“Sheet”,通过excel.sheets()[0]方式获取,0默认是第一个。

你可能感兴趣的:(Python 参数化读取Excel登录,获取Token写入文件)