相关文章推荐
逆袭的登山鞋  ·  从资源文件里加载文件或读取资源(C#)_c# ...·  7 月前    · 
爱喝酒的哑铃  ·  JS获取文本在HTML中的真实长度_html ...·  1 年前    · 
路过的香蕉  ·  import : ...·  1 年前    · 
听话的显示器  ·  How can I get the ...·  1 年前    · 
帅呆的匕首  ·  【SQL】SQL中Case When的用法 ...·  1 年前    · 
Code  ›  Python+Pytest+Allure+Json 最全Api自动化框架之邮件发送功能开发者社区
https://cloud.tencent.com/developer/article/2040323
火爆的铅笔
7 月前
Wu_Candy

Python+Pytest+Allure+Json 最全Api自动化框架之邮件发送功能

前往小程序,Get 更优 阅读体验!
立即前往
腾讯云
开发者社区
文档 建议反馈 控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
Wu_Candy
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
社区首页 > 专栏 > Python+Pytest+Allure+Json 最全Api自动化框架之邮件发送功能

Python+Pytest+Allure+Json 最全Api自动化框架之邮件发送功能

作者头像
Wu_Candy
发布 于 2022-07-04 21:19:19
987 0
发布 于 2022-07-04 21:19:19
举报
文章被收录于专栏: 无量测试之道
这是无量测试之道的第230篇原创

Python+Pytest+Allure+Json 最全Api自动化框架 分享后,受到许多小伙伴的关注,最近一直在完善这个 API 自动化框架的功能,准备在框架成熟后分享给更多需要的小伙伴们。

今日分享的主题是:Python+Pytest+Allure+Json 的 API 自动化框架的邮件发送功能的完善。该邮件发送功能的实现分为以下四个部分。

Part 1:以接口为示例

代码语言: javascript
复制
# coding:utf-8
import pytest
import allure
import os
import subprocess
from commons.HandleJson import handle_json
import commons.configs as config
from commons.DBConn import DBConn
from commons.log import logger
from commons.HandleCompare import compareTest
from commons.ApiRequest import apiRequest
from SendEmail import send_mail
baseFileName = '../testdata/post_user_login_data.json'
testCaseData = handle_json.load_json(baseFileName)
@pytest.fixture()
def executeSql():
    logger.info("execute the sql")
# @pytest.mark.run(order=1)
@pytest.mark.usefixtures('executeSql')
@allure.feature('用户登录')
class TestUserLogin():
    @allure.title('用户登录接口')
    @allure.testcase('测试地址:http://127.0.0.1:5055')
    @allure.description('通过接口进行用户登录')
    @allure.step("第一步:用户登录")
    @allure.severity(allure.severity_level.BLOCKER)
    @pytest.mark.parametrize('case_data', testCaseData['testcase'])
    def testUserLogin(self, case_data):
        api_response = apiRequest.api_request(config.apiurl, testCaseData, case_data)
        for case_validate in case_data['validate']:
            logger.info('断言期望相关参数:check:{},comparator:{},expect:{}'.format(case_validate['check'],case_validate['comparator'],case_validate['expect']))
            compareTest.compare_Assert(api_response, case_validate['check'], case_validate['comparator'],case_validate['expect'])
if __name__ == "__main__":
    # 生成配置信息 "-s 代表可以将执行成功的案例日志打印出来 ; -q+文件执行路径 代表只需要执行的文件"
    # pytest.main(['-s', '-v', 'TestGetPropertyType.py','-q'])
    pytest.main(['-s', '-v', 'TestUserLogin.py', '-q', '--alluredir', 'report'])
    os.system('if exist "report/htmls" (rd /s/q report/htmls)')
    os.system('allure generate report -o report/htmls --clean')
    send_mail("Liang.Wu@test.com", "api测试报告", "测试报告的访问地址为:http://desktop-fe56ou7:8881/index.html<br> 请在收到邮件后三十分钟内查看!")
    os.system('allure open -h 10.8.31.61 -p 8881 report/htmls')

Part 2:测试数据示例

代码语言: javascript
复制
{
    "config":{
        "apiname":"user login",
        "url":"/login",
        "method":"POST",
        "headers":{
            "Content-Type":"application/json"
        "cookies":{}
    "testcase":[
            "name":"case1",
            "params":{
                "username":"root",
                "password":"root"
            "validate":[
                    "check":"message",
                    "comparator":"eq",
                    "expect":"success"
                    "check":"code",
                    "comparator":"eq",
                    "expect": 200
            "name":"case2",
            "params":{
                "username":"admin",
                "password":"1234567"
            "validate":[
                    "check":"message",
                    "comparator":"eq",
                    "expect":"fail"
                    "check":"code",
                    "comparator":"eq",
                    "expect": 401
            "name":"case3",
            "params":{
                "username":"root",
                "password":"1234567"
            "validate":[
                    "check":"message",
                    "comparator":"eq",
                    "expect":"fail"
                    "check":"code",
                    "comparator":"eq",
                    "expect": 401
            "name":"case3",
            "params":{
                "username":"roots",
                "password":"root"
            "validate":[
                    "check":"message",
                    "comparator":"eq",
                    "expect":"fail"
                    "check":"code",
                    "comparator":"eq",
                    "expect": 401

Part 3:邮箱发送方法实现

代码语言: javascript
复制
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import smtplib
def send_mail(receivers, title, content):
    sender = 'qa.notice@test.com'
    print(receivers)
    mailto = receivers.split(",")
    print(mailto)
        msg = MIMEMultipart()
        msg['Subject'] = title
        to_user = ",".join(mailto)
        print("receivers...", to_user)
        msg['to'] = to_user
        msg['From'] = sender
        body = MIMEText(content, 'html', 'utf-8')
        msg.attach(body)
        smtp = smtplib.SMTP('smtp.office360.com', 587)
        smtp.starttls()
        smtp.login("qa.notice@test.com", "rdvkmzbckyj")
 
推荐文章
逆袭的登山鞋  ·  从资源文件里加载文件或读取资源(C#)_c# 添加和读取资源-CSDN博客
7 月前
爱喝酒的哑铃  ·  JS获取文本在HTML中的真实长度_html 获取数字的文本长度-CSDN博客
1 年前
路过的香蕉  ·  import : 无法将“import”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径 正确,然后再试一次。-CSDN博客
1 年前
听话的显示器  ·  How can I get the "Microsoft ODBC for Oracle" driver to work in Windows 7 - Stack Overflow
1 年前
帅呆的匕首  ·  【SQL】SQL中Case When的用法 - HDWK - 博客园
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号