今天,我们来介绍一下框架中灵魂部分,commonlib包里的py文件。
这个包里有4个文件,分别是confighttp,connectdb,htmlresult,sendemail,我们下面一个个详细讲解。
1. init初始化
首先我们要明确一个接口由哪些部分组成,然后对这些数据进行初始化。
def __init__(self):
global scheme, api_url, port
scheme = http_data["scheme"] #指的是http/https,
api_url = http_data["url"] #指的是www.xxx.com,
port = http_data["port"] #默认是80端口,如果接口地址被改了,比如上面的8080,则就是指8080端口。
self.data = {}
self.url = {}
self.state = 0
这里新增了三个全局变量,scheme,url,port。我们知道,一个接口地址是类似这种组成:https://www.xxx.com:8080/api/aaa,
如果你的项目里涉及到的接口是多个项目的,导致域名是多个,那么你可以通过设置多个url变量,来满足工作需要。
2. set_url(self,url)接口地址
def set_url(self, url):
"""
set url
:param: interface url
:return:
"""
self.__url = scheme + '://' + api_url + url
这里的url是在调用该方法传参,比如上面的api/aaa,在这里先不举例说明了,等框架结构讲完了再根据案例详细讲解其使用方法。
3:set_data(self,data)接口请求报文
def set_data(self, data):
"""
set data
:param data:
:return:
"""
self.__data = data
这个方法没什么好说的,调用直接把报文就传过来了。
4:get(self)get请求
def get(self):
"""
defined get method
:return:
"""
try:
response = requests.get(self.url, headers=self.headers, params=self.params)
# response.raise_for_status()
return response
except TimeoutError:
self.logger.error("Time out!")
return None
get请求,用得比较少,我的项目里基本上不会用到,这里就不说了,get是没有data数据的,参数就在url里面。
5:post(self)post请求
def post(self):
"""
defined post method
:return:
"""
try:
response = requests.post(self.__url, json=self.__data)
# response.raise_for_status()
return response
except TimeoutError:
return None
post请求,这里调用了requests里的post方法,然后我们只需要在post方法里传两个参数,url和data即可得到接口返回。
confighttp的组成就到这里,是不是很简单?^ ^
这个其实很简单,就是根据数据库服务器地址连接上就可以了。
# 数据库连接
def connectdb():
connect = pymysql.connect(host=db_data["host"], user=db_data["username"], password=db_data["password"],
port=db_data["port"], db=db_data["database"]) # 连接数据库
c = connect.cursor()
return connect, c # 返回连接和游标
数据库服务器的配置信息都放在testdata里单独配置。
这个方法也很简单,使用比较成熟的HTMLTestRunner即可,然后记得要区分python2和python3的区别。可参考我另一篇博客:https://blog.csdn.net/weixin_43574761/article/details/84585181
def result():
filename = 'result.html'
fp = open(filename, 'wb')
runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u'测试报告', description=u'用例执行情况:')
return runner, fp # 为什么要返回fp呢,因为调用这个方法的时候,还没有执行用例,所以返回fp,执行完用例,在关闭文件。
项目根目录先新增一个result.html文件,这样在调用这个方法的时候,才能将测试结果写入result.html文件中。
import time
import smtplib
from smtplib import SMTP_SSL
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
from testdata.email_data import email_data
# 发送邮件,发送测试报告html
def send_email(newfile):
f = open(newfile, 'rb')
mail_body = f.read()
f.close()
today = time.strftime('%Y-%m-%d')
smtpserver = email_data['smtpserver']
user = email_data['user']
password = email_data['password']
sender = email_data['sender']
receiver = email_data['receiver']
cc = email_data['cc']
# 发送邮件主题
subject = '【XXXXX】接口自动化测试报告%s' % today
msg = MIMEMultipart('mixed')
msg_html1 = MIMEText(mail_body,
'html', 'utf-8') # 邮件内容
msg.attach(msg_html1)
msg_html2 = MIMEText('\n' + "注:请点击链接查看详情 ", 'html', 'utf-8')
msg.attach(msg_html2)
msg_html = MIMEText(mail_body, 'html', 'utf-8') # 邮件附件
msg_html['Content-Disposition'] = 'attachment; filename="TestReport.html"'
msg.attach(msg_html)
msg['From'] = sender
msg['To'] = ';'.join(receiver)
msg['Cc'] = ';'.join(cc)
receiver = receiver + cc
msg['Subject'] = Header(subject, 'utf-8');
# 连接发送邮件
try:
smtp = SMTP_SSL(smtpserver)
smtp.login(user, password)
smtp.sendmail(sender, receiver, msg.as_string())
smtp.quit()
print("邮件发送成功!")
except smtplib.SMTPException:
print("Error:无法发送邮件!")
注意:我这里使用的SSL链接的方式,大家使用的时候要看一下自己的邮箱服务器配置,然后选择使用。
框架最主要的灵魂内容已经介绍完啦,是不是没有想象中那么难,大家如有任何问题,可以加我的微信:zx1187463903,拉你进软测的微信群,一起学习讨论。
如果该篇博客,对你有帮助,开心的同时请小编喝杯咖啡也是极好的呀。-_-