一、 封装get和post方法
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import requests
import json
class RunMain(object):
# 构造方法,暂时不用
'''
def __init__(self, method, url, data, headers):
# self.res称为实例变量,实例化类后可以直接调用
self.res = self.run_main(method, url, data, headers)
'''
# post方法
def send_post(self, url, data, headers):
res = requests.post(url=url, data=data, headers=headers)
# 暂时不处理json格式为字典格式,否则后面读取token值报错
# res = json.dumps(res, indent=2, sort_keys=True)
return res
# get方法
def send_get(self, url, data, headers):
res = requests.get(url=url, data=data, headers=headers)
# res = json.dumps(res, indent=2, sort_keys=True)
return res
# 执行方法
def run_main(self, method, url, data, headers):
if method == "POST":
res = self.send_post(url, data, headers)
else:
res = self.send_get(url, data, headers)
# print(res)
return res
if __name__ == "__main__":
url = "http://www.XXX/inter/HTTP//auth"
data = None
heards = {"Content-Type": "application/json"}
rm = RunMain()
rm.run_main("POST", url, data, heards)
二、 结合ini配置文件获取参数并封装接口运行方法
1. ini配置文件(接口信息)如下:
[Auth]
method = POST
url = http://XXX/inter/HTTP//auth
data = None
headers = {"Content-Type": "application/json"}
[Login]
method = POST
url = http://XXX/inter/HTTP//login
data = {"username": "XXX","password": "XXX"}
headers = None
[Logout]
method = POST
url = http://XXX/inter/HTTP//logout
data = None
headers = None
2. 获取ini配置文件方法如下:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import configparser
import os
# 读取ini配置文件中数据
def get_info(name, param):
# 读取配置文件
config = configparser.ConfigParser()
file_path = os.path.dirname(os.path.abspath('.')) + '/config/api_info.ini'
config.read(file_path, encoding='UTF-8')
return config.get(name, param)
3. 封装接口运行方法如下:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from tools.get_info import get_info
from tools.get_token import get_token
import os
from ruamel import yaml
from tools.run_main import RunMain
class RunOne(object):
def __init__(self):
self.run = RunMain()
def get_method(self, name):
method = get_info(name, param="method")
return method
def get_url(self, name):
url = get_info(name, param="url")
return url
def get_data(self, name):
data = get_info(name, param="data")
return data
def get_headers(self, name):
headers = get_info(name, param="headers")
return headers
def run_one(self, name):
method = self.get_method(name)
url = self.get_url(name)
data = eval(self.get_data(name))
headers = eval(self.get_headers(name))
if name == "Auth":
response = self.run.run_main(method, url, data, headers)
# 把token值写入配置文件中
yamlpath = os.path.dirname(os.path.abspath('.')) + '/config/token.yaml'
tokenValue = {
'token': response.json()["token"]
}
with open(yamlpath, "w", encoding="utf-8") as f:
yaml.dump(tokenValue, f, Dumper=yaml.RoundTripDumper)
else:
headers = {"token": get_token()}
response = self.run.run_main(method, url, data, headers)
print(response.json())
return response.json()
if __name__ == "__main__":
run = RunOne()
run.run_one("Auth")
run.run_one("Login")
run.run_one("Logout")
三、用pytest管理用例
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import pytest
from common.run_one import RunOne
from tools.get_log import get_log
logging = get_log()
class TestEdu(object):
@pytest.fixture(scope="class")
def before(self):
print()
logging.info("------用例开始------")
res = RunOne()
return res
@pytest.mark.run(order=1)
def test_auth(self, before, name="Auth"):
response = before.run_one(name)
assert response['status'] == 200
# 登录接口
# @pytest.mark.skip("暂时不执行")
@pytest.mark.run(order=2)
def test_login(self, before, name="Login"):
response = before.run_one(name)
assert response['status'] == 200
def test_logout(self, before, name="Logout"):
response = before.run_one(name)
assert response['status'] == 200
if __name__ == "__main__":
pytest.main(['-s', 'test_all.py'])
运行结果:
四、 用插件pytest-html生成测试用例
1.安装pytest-html插件,用命令pip install pytest-html或者直接在pycharm中安装
2.应用方式:--html后面的值代表测试报告生成后放置的路径
pytest.main(['-s', 'test_all.py', '--html=../report/test.html'])
测试报告如下:
五、封装发送邮件方法
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
import smtplib
# 定义发邮件
def send_mail(file_path):
f = open(file_path, 'rb')
mail_body = f.read()
f.close()
smtpserver = 'smtp.qq.com'
user = '[email protected]'
password = "XXX"
sender = '[email protected]'
receives = ['[email protected]']
# 构造邮件对象
msg = MIMEMultipart('mixed')
# 定义邮件的标题
subject = '接口自动化测试报告'
# HTML邮件正文,定义成字典
msg['Subject'] = Header(subject, "utf-8")
msg['From'] = sender
msg['To'] = ','.join(receives)
# 构造文字内容
text_plain = MIMEText(mail_body, 'html', 'utf-8')
msg.attach(text_plain)
# 构造附件
text_attr = MIMEText(mail_body, 'base64', 'utf-8')
text_attr["Content-Type"] = 'application/octet-stream'
text_attr['Content-Disposition'] = 'attachment; filename = "test.html"'
msg.attach(text_attr)
# 邮箱设置时勾选了SSL加密连接,进行防垃圾邮件,SSL协议端口号要使用465
smtp = smtplib.SMTP_SSL(smtpserver, 465)
# 向服务器标识用户身份
smtp.helo(smtpserver)
# 向服务器返回确认结果
smtp.ehlo(smtpserver)
# 登录邮箱的账号和授权密码
smtp.login(user, password)
print("start send email...")
# 开始进行邮件的发送,msg表示已定义的字典
smtp.sendmail(sender, receives, msg.as_string())
smtp.quit()
print("send email end")
if __name__ == "__main__":
report = "C:\\Users\\Administrator\\PycharmProjects\\APITest\\report\\test.html"
send_mail(report)
运行结果: