同时运行不同的测试用了,生成报告并发送至邮箱

这个项目运行成功,设计到的功能点:生成测试报告,并自动已邮件的形式发送到qq邮箱,
利用模块化模式批量运行两个不同的测试用例

遇到的坑:测试用例的报告一定要存放在其他路径,不能存放在项目的相关路径,
这样自动发送邮件时会提取的到,不然就会一直无法自动发送邮件

运行的文件:all_tests.py

all_tests.py 文件内容


#coding=utf-8
import os
import unittest
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from datetime import datetime
import time
from BSTestRunner import BSTestRunner #引入BSTestRunner包

#自动发送邮件
def send_email(new_report):
    #读取测试报告中的内容作为邮件的内容
    with open(new_report,'r',encoding='utf-8') as f:
        mail_body = f.read()
    #发件人地址
    from_addr = 'caiting0818@qq.com'
    #收件人地址
    to_addr = 'caiting0818@qq.com'
    #发送邮箱的服务器地址
    mail_server = 'smtp.qq.com'
    #邮件的标题
    subject =u'qq登录测试报告'
    #发件人的邮箱地址
    username = 'caiting0818@qq.com'
    password = 'puiqzotbyjirjdia'
    #邮箱的内容和标题
    message = MIMEText(mail_body,'html','utf-8')
    message['Subject'] = Header(subject,charset='utf-8')
    #发送邮件
    smtp = smtplib.SMTP()
    smtp.connect(mail_server)
    smtp.login(username,password)
    smtp.sendmail(from_addr,to_addr.split(','),message.as_string())
    smtp.quit()

#获取最新报告的地址
def acquire_report_address(reports_address):
    #测试报告文件夹中的所有文件加入到列表
    test_reports_list = os.listdir(reports_address)
    #按照升序排序生成新的列表
    new_test_reports_list = sorted(test_reports_list)
    #获取最新的测试报告
    the_last_report = new_test_reports_list[-1]
    #最新的测试报告的地址
    the_last_report_address = os.path.join(reports_address,the_last_report)
    return the_last_report_address


if __name__ == '__main__':
    # 生成测试报告并发送邮件
    #测试报告文件夹地址
    test_reports_address = u'C:\\Users\\Admin\\Desktop\\测试报告'
    #测试用例的文件夹地址
    test_cases_dir = r'C:\\Users\\Admin\\PycharmProjects\\pythonProject3\\lianxi\\test'
    #获取所有的测试用例
    test_cases = unittest.defaultTestLoader.discover(test_cases_dir,pattern='*.py')
    #获取当前时间
    now = datetime.now().strftime('%Y%m%d%H%MM%f')
    #生成以当前时间命名的测试报告文件名
    test_report_name = r'{}\report_{}.html'.format(test_reports_address,datetime.now().strftime('%Y%m%d%H%M%f'))
    #生成以当前时间命名的测试报告文件
    file_report = open(test_report_name,'w',encoding='utf-8')
    #生成html形式的报告
    runner = BSTestRunner(stream=file_report,title=u'测试报告',description=u'QQ登录测试报告结果:')
    #运行
    runner.run(test_cases)
    #关闭打开的测试报告文件
    file_report.close()

    time.sleep(5)
    #查找最新生成的测试报告地址
    new_report_addr = acquire_report_address(test_reports_address)
    #自动发送邮件
    send_email(new_report_addr)

baidu.py  文件内容

#coding=utf-8  
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
import unittest, time, re

class Baidu(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Firefox()
        self.driver.implicitly_wait(30)
        self.base_url = "http://www.baidu.com/"
        self.verificationErrors = []
        self.accept_next_alert = True
    #百度搜索用例
    def test_baidu_search(self):
        u"""百度搜索"""
        driver = self.driver
        driver.get(self.base_url + "/")
        driver.find_element_by_id("kw").send_keys("selenium webdriver")
        driver.find_element_by_id("su").click()
        time.sleep(2)
        driver.close()
    #百度设置用例
    def test_baidu_set(self):
        u"""百度设置"""
        driver = self.driver
        #进入搜索设置页
        driver.get(self.base_url + "/gaoji/preferences.html")
        #设置每页搜索结果为50条
        m=driver.find_element_by_name("NR")
        m.find_element_by_xpath("//option[@value='50']").click()
        time.sleep(2)
        #保存设置的信息
        driver.find_element_by_xpath("/html/body/form/div/input").click()
        time.sleep(2)
        driver.switch_to_alert().accept()
    def tearDown(self):
        self.driver.quit()
        self.assertEqual([], self.verificationErrors)

if __name__ == "__main__":
    unittest.main()

Login.py   文件内容

# coding=utf-8
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
import unittest, time, re

class Login(unittest.TestCase):
    def setUp(self):
        # 初始化驱动
        self.driver = webdriver.Firefox()
        self.driver.implicitly_wait(30)
        # 设置要打开的网页链接
        self.url = 'http://192.168.96.207:8087/t6/'

        self.verificationErrors = []
        self.accept_next_alert = True

        # 登录用例

    def test_Login(self):
        u"""登录"""
        driver = self.driver
        driver.get(self.url + "/")
        # 取ID为elem_user的网页元素(用户名输入元素)
        elem_user1 = driver.find_element_by_id('showAccount')
        elem_user1.click()
        elem_user = driver.find_element_by_id('userAccount')
        # 清空输入
        elem_user.clear()
        # 键入用户名
        elem_user.send_keys('ctt')
        # 取ID为elem_pass的网页元素(密码输入元素)
        elem_pass1 = driver.find_element_by_id('showPassword')
        elem_pass1.click()
        elem_pass = driver.find_element_by_id('userPassword')
        # 清空输入
        elem_pass.clear()
        # 键入密码
        elem_pass.send_keys('123456')
        # 取ID为elem_login的登录按钮
        elem_login = driver.find_element_by_id('dengluBtn')
        # 点击登录按钮
        elem_login.click()
        time.sleep(5)
        # 通过frame方式定位
        driver.switch_to.frame("id_iframe")
        # 获取需要断言的文本'yanzheng=蔡婷婷'
        yanzheng = driver.find_element_by_id('userName').text
        print(yanzheng)
        # 点击用户
        driver.find_element_by_id('id_login_user').click()
        # 点击退出
        driver.find_element_by_id('id_a_exit').click()
        time.sleep(2)
        # 退出frame方式定位
        driver.switch_to.default_content()
        # 点击确定
        driver.find_element_by_class_name('layui-layer-btn0').click()
        time.sleep(3)

    def tearDown(self):
        self.driver.quit()
        self.assertEqual([], self.verificationErrors)

if __name__ == "__main__":
    unittest.main()

结构目录

好的,这个问题我可以回答。您可以使用Python编写一个App自动化测试框架,使用Appium进行自动化测试。以下是一些步骤: 1. 安装Python和Appium。 2. 安装必要的Python库,如selenium、pytest、allure-pytest等。 3. 编写测试脚本,使用selenium和Appium进行交互。 4. 集成日志模块,使用Python内置的logging库来生成日志。 5. 集成邮件送模块,使用Python内置的smtplib库来送邮件。 以下是一个简单的示例代码: ```python import logging import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.application import MIMEApplication from selenium.webdriver.common.by import By from selenium.webdriver.remote.webdriver import WebDriver from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import pytest import allure class TestApp: @pytest.fixture(scope="session") def driver(self) -> WebDriver: # 初始化Appium driver # ... @allure.step("登录") def login(self, driver: WebDriver): # 登录测试代码 # ... @allure.step("测试用例1") def test_case1(self, driver: WebDriver): # 测试用例1代码 # ... @allure.step("测试用例2") def test_case2(self, driver: WebDriver): # 测试用例2代码 # ... @allure.step("测试用例3") def test_case3(self, driver: WebDriver): # 测试用例3代码 # ... @allure.step("生成日志") def generate_log(self): # 生成日志代码 # ... @allure.step("送邮件") def send_email(self): # 邮件送代码 # ... def test_main(self, driver: WebDriver): self.login(driver) self.test_case1(driver) self.test_case2(driver) self.test_case3(driver) self.generate_log() self.send_email() if __name__ == '__main__': test_app = TestApp() driver = test_app.driver test_app.test_main(driver) driver.quit() ``` 在这个示例中,我们使用了pytest和allure来管理测试用例和测试报告。使用allure.step注释来记录每个测试步骤的名称。使用Python内置的logging库来生成日志,使用smtplib库来送邮件。 当您运行测试脚本时,将生成一个包含所有测试结果的HTML报告,并将其保存在allure-report目录中。如果测试失败,则将在控制台输出详细的错误消息,并生成包含错误信息的日志文件。如果测试成功,则将生成包含测试结果的日志文件。最后,将送电子邮件,其中包含生成的日志文件和测试报告。 希望这可以帮助到您!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值