【UI自动化】:基于python+selenium2的自动化测试项目实战


整体的项目结构如下:

 

 

data:存放测试数据

report:imgae放测试截图、reportdata存放测试生成的报告

test_case:models存放公用模块的函数,page_obj存放页面类;***_sta测试用例

run_test:执行入口

具体每个模块的代码:

driver.py(启动浏览器)

from selenium.webdriver import Remote
from selenium import webdriver

def browser():
    driver = webdriver.Firefox()
    return driver


if __name__ == '__main__':
    dr = browser()
    dr.get("URL")
    dr.quit()

function.py(功能函数,插入图片等)

from selenium import webdriver
import os


def insert_img(driver, file_name):
    base_dir = os.path.dirname(os.path.dirname(__file__))
    base_dir = str(base_dir)
    base_dir = base_dir.replace('\\', '/')
    base = base_dir.split('test_case')[0]
    file_path = base + "report/image/" + file_name
    driver.get_screenshot_as_file(file_path)

if  __name__ == '__main__':
    driver = webdriver.Firefox()
    driver.get("URL")
    insert_img(driver, 'insert_img')
    driver.quit()

 

myunit.py

from selenium import  webdriver
import sys
from .driver import browser
import unittest

class MyTest(unittest.TestCase):

    def setUp(self):
        self.driver = browser()
        self.driver.implicitly_wait(10)
        self.driver.maximize_window()

    def tearDown(self):
        self.driver.quit()

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

basePage.py(一些公用的页面函数)

from time import sleep
class Page(object):

    jiance_url = 'URL'  #测试web的地址

    def __init__(self, selenium_driver, base_url=jiance_url, parent=None):
        self.base_url = base_url
        self.driver = selenium_driver
        self.timeout = 30
        self.parent = parent

    def _open(self, url):
        url = self.base_url + url
        self.driver.get(url)
        sleep(2)

    def find_element(self, *loc):
        return self.driver.find_element(*loc)

    def find_elements(self, *loc):
        return self.find_elements(*loc)

    def open(self):
        self._open(self.url)


    def on_page(self):
        return self.driver.current_url == (self.base_url + self.url)

    def script(self, src):
        return self.driver.execute_script(src)

loginpage.py

#from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
from .basePage import Page
from time import sleep

class login(Page):

    url = '/#/login'

    login_username_loc = (By.XPATH, "//div[@id='main']/div/div/form/div/div/div/input")
    login_password_loc = (By.XPATH, "//input[@type='password']")
    login_button_loc = (By.XPATH, "//button[@type='button']")

    def login_username(self, username):
        self.find_element(*self.login_username_loc).clear()
        self.find_element(*self.login_username_loc).send_keys(username)


    def login_password(self, password):
        self.find_element(*self.login_password_loc).clear()
        self.find_element(*self.login_password_loc).send_keys(password)

    def login_button(self):
        self.find_element(*self.login_button_loc).click()

    def get_loginpage_handle(self):
        self.open()
        loginpage_handle = self.driver.current_window_handle
        return loginpage_handle

    def user_login(self, username="", password=""):
        self.open()
        self.login_username(username)
        self.login_password(password)
        self.login_button()
        sleep(2)


    #错误验证
    #user_error_loc = (By.LINK_TEXT, u"")
    #user_login_success_loc = (By.XPATH, "/html/head/title")
    #title = self.driver.title()
    def user_login_success(self):
            #title = self.driver.title
            #return self.find_element(*self.user_login_success_loc).text
        return self.driver.title

login_sta.py(写测试用例的py)

from time import sleep
import unittest
import sys
import time
from models import myunit
from models import function
from page_obj.loginPage import login
sys.path.append("./models")
sys.path.append("./page_obj")

class loginTest(myunit.MyTest):

    def user_login_verify(self, username="", password=""):
        login(self.driver).user_login(username, password)

    def test_login1(self):
        self.user_login_verify(username='username', password='password')
        po = login(self.driver)
        self.assertEqual(po.user_login_success(), u'检测系统')
        now_time = time.strftime("%Y_%m_%d_%H_%M_%S")
        img_name = now_time + '.png'
        function.insert_img(self.driver, img_name)

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

run_test.py(执行入口)

import unittest
from HTMLTestRunner import HTMLTestRunner
import time
from email.mime.text import MIMEText
from email.header import Header
import smtplib
import os


# 发送测试报告,需要配置你的邮箱账号。
def send_mail(file_new):
    mail_from = 'mail_from@qq.com'
    mail_to = 'mail_to@qq.com'
    f = open(file_new, 'rb')
    print(f)
    mail_body = f.read()
    f.close()
    print(mail_body)
    msg = MIMEText(mail_body, _subtype='html', _charset='utf-8')
    msg['Subject'] = u"自动化测试报告"
    smtp = smtplib.SMTP()
    smtp.connect('smtp.qq.com')
    smtp.login('mail_from@qq.com', 'mail_password')
    smtp.sendmail(mail_from, mail_to, msg.as_string())
    print(msg.as_string())
    smtp.quit()
    print('邮件已发送')


# 查找最新生成的测试报告
def get_new_file(files):
    lists = os.listdir(files)
    lists.sort(key=lambda fn: os.path.getmtime(files+"\\"+fn))
    file_ = os.path.join(files, lists[-1])
    print(file_)
    return file_


if __name__ == '__main__':
    test_app = "./"
    now_time = time.strftime("%Y_%m_%d_%H_%M_%S")
    fp = open(test_app+"/report/reportdata/"+now_time+"result.html", 'wb')
    runner = HTMLTestRunner(fp,
                            title="检测系统测试报告",
                            description="运行环境:windows 10, firefox")
    discover = unittest.defaultTestLoader.discover(test_app+"/test_case", pattern='*_sta.py')
    runner.run(discover)
    file_path = get_new_file('./report/reportdata/')
    print(file_path)
    send_mail(file_path)

    fp.close()

执行后会在指定的路径下生成一份html的文档,并发送邮件,附件如下:

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM