接口自动化测试框架(四)--commonlib框架的灵魂方法

今天,我们来介绍一下框架中灵魂部分,commonlib包里的py文件。
这个包里有4个文件,分别是confighttp,connectdb,htmlresult,sendemail,我们下面一个个详细讲解。

一:confighttp,接口地址和请求

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的组成就到这里,是不是很简单?^ ^

二:connectdb,数据库连接

这个其实很简单,就是根据数据库服务器地址连接上就可以了。

# 数据库连接
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里单独配置。

三:htmlresult,生成html测试报告

这个方法也很简单,使用比较成熟的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文件中。

四:sendemail,发送测试结果报告

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,拉你进软测的微信群,一起学习讨论。
如果该篇博客,对你有帮助,开心的同时请小编喝杯咖啡也是极好的呀。-_-
接口自动化测试框架(四)--commonlib框架的灵魂方法_第1张图片

你可能感兴趣的:(接口自动化测试框架,接口自动化测试框架,发送测试邮件,HTMLTestRunner,数据库连接,生成html测试报告)