python+selenium简易自动化框架,包含生成测试报告以及发送结果至Email

本文介绍如何使用Selenium和Python进行自动化测试环境搭建,包括简易框架的设计、测试用例编写、测试结果生成及邮件发送流程。通过具体示例展示了自动化测试的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Selenium+python环境搭建见虫师的pdf文档,非常详尽

简易框架:

1.文件目录:

report目录中存放测试结果,:

Test_case中存放所有用例case,以及public公共目录,Data(测试数据)

当然测试数据如果不复杂,我们可以直接写在config

2.testcase内容编写

test_case下新增一个.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
from selenium.common.exceptions import NoAlertPresentException
import unittest, time, re,ConfigParser
import sys
sys.path.append('\public')
from public import login

 

第二步:新建类

固定的那个方法 setUp,tearDown,包含了pythonconfig的读取.,类里面的方法调用时前面加上self.

class Cyt(unittest.TestCase):
    def setUp(self):
        cf=ConfigParser.RawConfigParser()
        cf.read("config.conf")
        self.driver = webdriver.Firefox()
        self.driver.implicitly_wait(30)
        self.base_url = cf.get("info","url")
        print self.base_url
        self.verificationErrors = []
        self.accept_next_alert = True
        self.username=cf.get("info","username")
        self.pwd=cf.get("info","pwd")
        self.cytpwd=cf.get("info","cytpwd")

    def test_cyt01_index(self):
        u'''首页加载'''
        driver=self.driver
        driver.set_window_size(414,736)
        driver.get(self.base_url)
        driver.find_element_by_xpath('/html/body/div[1]/div[3]/div[2]/a').click()
        driver.set_page_load_timeout(30)
        time.sleep(2)
        title=driver.title
        catched=False
        try:
            self.assertEqual(u'XXXX',title)
        except AssertionError as e:
            catched=True
            self.verificationErrors.append(str(e))
        if catched:
            print u'XX界面异常'
        else:
            print u'XX界面正常'
        driver.back()
        self.cyt02_investlist()

 ......中间若干方法或者若干testcase,结尾处加上tearDown,以及main。。

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

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

 

登录模块写在public,别的模块直接引入包 就可直接调用

#coding=utf-8
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
import unittest, time

#登陆模块(函数)
def login(self):
    driver = self.driver
    driver.get(self.base_url + "/")
    print self.base_url
    account=driver.find_element_by_xpath("/html/body/div[2]/ul/li[4]/a").click()
    time.sleep(2)
    driver.find_element_by_name("username").clear()
    driver.find_element_by_name("username").send_keys(self.username)
    driver.find_element_by_name("password").clear()
    driver.find_element_by_name("password").send_keys(self.pwd)
    driver.find_element_by_xpath("/html/body/div/div/form[1]/div[4]/input").submit()
    time.sleep(5)
    title=driver.title
    error1=True
    try:
        self.assertEqual(u"账号登录", title)
    except AssertionError as e:
        error1=False
    if error1:
        driver.find_element_by_id("password").clear()
        driver.find_element_by_id("password").send_keys(self.cytpwd)
        driver.find_element_by_id("login_btn").submit()
        time.sleep(2)

 

第三步,生成测试结果,并发送测试结果至指定的邮箱

#coding=utf-8
import unittest
import HTMLTestRunner
import os ,time,datetime
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
import ConfigParser
#=============定义发送邮件==========

cf=ConfigParser.RawConfigParser()
cf.read("config.conf")
mdir= cf.get("info","dir")
result_dir=mdir+"report"
case_dir=mdir+"test_case"
def sentmail(file_new):
    mail_from=cf.get("info","mail_from")
    mail_to=cf.get("info","mail_to")
    f = open(file_new, 'rb')
    mail_body = f.read()
    f.close()
    msg=MIMEText(mail_body,_subtype='html',_charset='utf-8')
    msg['From']=u'自动化测试'
    msg['Subject']=u"XX测试报告"
    msg['date']=time.strftime('%a, %d %b %Y %H:%M:%S %z')
    str_smtp=cf.get("info","smtp")
    smtp=smtplib.SMTP_SSL(str_smtp,465)
    email_pwd=cf.get("info","email_pwd")
    smtp.login(mail_from,email_pwd)
    smtp.sendmail(mail_from,mail_to,msg.as_string())
    smtp.quit()
    print 'email has send out !'
    
def sendreport():
    lists=os.listdir(result_dir)
    lists.sort(key=lambda fn: os.path.getmtime(result_dir+"\\"+fn) if not
    os.path.isdir(result_dir+"\\"+fn) else 0)
    print (u'最新测试生成的报告: '+lists[-1])
    file_new = os.path.join(result_dir,lists[-1])
    print file_new
    sentmail(file_new)

listaa=mdir+"test_case"    
def creatsuit():
    testunit=unittest.TestSuite()
    discover=unittest.defaultTestLoader.discover(listaa,
    pattern ='*.py',top_level_dir=None)
    for test_suite in discover:
        for test_case in test_suite:
            testunit.addTests(test_case)
            print testunit
    return testunit


if __name__ == "__main__":
    now = time.strftime("%Y-%m-%d-%H_%M_%S",time.localtime(time.time()))
    filename = result_dir+'\\'+now+'result.html'
    fp = file(filename, 'wb')
    runner =HTMLTestRunner.HTMLTestRunner(
    stream=fp,
    title=u'XX测试报告',
    description=u'用例执行情况:')
    runner.run(creatsuit())
    fp.close()
    sendreport()

 测试报告:

转载于:https://www.cnblogs.com/agile2011/p/5970194.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值