pytest+Excel自动化测试

conftest.py 是一个专门存放fixture的配置文件,文件名称不能改,然后里面的函数名称不用加test,要和pytest的测试用例区分开

重点如果有在项目里实践过接口自动化测试的大佬刚好看到我这边文章,可以评论指点一下,实际项目里大家都是用什么框架,用例是写在哪里,感谢

app.py

BASE_URL='http:XXXXX'

 md5.py

md5加密处理

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import hashlib


class StrUtil(object):

    def to_md5(self, text):
        md = hashlib.md5()
        md.update(text.encode('utf-8'))
        md5Str = md.hexdigest()
        return md5Str

conftest.py

fixture设置session,实现跨文件调用token

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import pytest
import requests
from excel.md5 import StrUtil
from excel.app import BASE_URL

@pytest.fixture(scope='session', autouse=True)
def login():
    url = '/admin/login'
    method = 'post'
    data = {
        'username': '张三',
        'password': '123456'
    }
    data['password'] = StrUtil().to_md5(data['password'])
    res =  requests.request(method=method,
                            url=BASE_URL + url,
                            json = data
                            )
    token = res.json()['data']['token']
    return token



 run_requests.py

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import requests
import os
#from excel.app import BASE_URL

class RequestsUtil:

    ses = requests.session()

    def send_requests(self, method, url, datas=None, **kwargs):
        method = str(method).lower()
        if method == 'get':
            res = RequestsUtil.ses.request(
                method=method,
                url=url,
                params=datas,
                **kwargs
            )
        elif method == 'post':
            res = RequestsUtil.ses.request(
                method=method,
                url=url,
                json=datas,
                **kwargs
            )
        else:
            pass
        return res

 handleExcel.py

import xlrd  # 读表格用的
from xlutils.copy import copy  # 写入表格用的




def read_data(file_path, i, j, point):  # 从文件获取数据 i从哪列开始取,j到哪列结束,point是功能,也就是把“创建成本”传过来
    my_file = xlrd.open_workbook(file_path)  # 打开表格
    table = my_file.sheets()[0]  # 取到第一张sheet
    rowcount = table.nrows  # 获得行数
    li = []
    for row in range(1, rowcount):  # 遍历所有行
        for col in range(i, j):  # 遍历参数所在列,定位好行号列号以后,就可以取出参数了
            if table.cell(row, 0).value == point:  # 这就是判断每一行的第二列的值,是不是等于“创建成本”
                li.append(table.cell(row, col).value)  # 如果是创建成本功能的用例,则把取出来得值存成list
    return (li)

 test_apiCase.py

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

from excel_02.handleExcel02 import *
import pytest
from excel_02.run_requests02 import RequestsUtil


class TestApicase(object):
	def test_creat(self,login):
		data_path = '../data/test01.xlsx'
		moudle= '成本创建'
		urls = read_data(data_path, 2, 3, moudle)   #找到测试用例文档对应的url所在列,我的是在第三列,从0开始,所以范围是(2,3),只取2,3是开口,取不到
		paras = read_data(data_path, 4, 5, moudle)   #取参数
		methods = read_data(data_path, 3, 4, moudle)   #取方法
		expectCodes = read_data(data_path, 5, 6, moudle)   #取响应状态
		expects = read_data(data_path, 6, 7, moudle)    #取响应数据
		for i in range(0, len(paras)):  # 循环调用接口,因为取出来的数据不止一条,也就是需要多次调用同一个接口
			url = urls[0]
			method = methods[0]
			expectCode = expectCodes[i]  # 把预期结果取出来一个
			para = eval(paras[i])  
			res = RequestsUtil().send_requests(method,
											   url,
											   headers={"token": login},
											   datas=para)
			resJson = res.json()
			code = resJson.get('code')  # 取出来返回值里的状态码,用来跟预期结果对比
			if code == expectCode:
				print('pass')
			else:
				print('fail')





if __name__ == '__main__':
    pytest.main(['-vs','test_apiCase.py'])

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值