zoukankan      html  css  js  c++  java
  • 自动化框架搭建(一)

    基本路径如图:

    然后贴一下代码:

    #driver.py
    
    from selenium import webdriver
    from selenium.webdriver import Remote
    #启动浏览器驱动
    def browser():
        dc = {'browserName':'chrome'}
        driver=Remote(command_executor='http://127.0.0.1:4444/wd/hub',
                      desired_capabilities =dc
                     )
        return driver
    if __name__=="__main__":
        dr=browser()
        dr.get("http://www.baidu.com/")
        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+'/report/image/'+file_name
        driver.get_sereenshot_as_file(file_name)
    
    if __name__=='__main__':
        driver=webdriver.Chrome()
        driver.get('http://www.baidu.com/')
        insert_img(driver,'baidu.jpg')
        driver.quit()
    
    #myunit.py
    
    from selenium import webdriver
    from driver import browser
    import unittest
    import os
    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()
    
    #base.py
    
    class Page(object):
        '''
        页面基础类,用于所有页面继承
        '''
    
        bbs_url='。。。登陆网址。。。'
    
    
        def __init__(self, selenium_driver, base_url=bbs_url, parent=None):
            self.base_url = base_url
            self.driver = selenium_driver
            self.timeout = 30
            self.parent = parent
    
        def _oprn(self,url):
            url = self.base_url+url
            self.driver.get(url)
            assert self.on_page() , 'Did not land on %s'%url
    
        def find_element(self,*loc):
            return self.driver.find_element(*loc)
    
        def find_elements(self,*loc):
            return  self.driver.find_elements(*loc)
    
        def open(self):
            self._oprn(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)
    
    #login_base.py
    
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.common.by import By
    from selenium import webdriver
    from .base import Page
    from time import sleep
    
    class Login(Page):
        '''
        用户登录界面
        '''
        url='/'
        #Action
    
        # bbs_login_user_loc=(By.XPATH,"//div[@title='海雾-镇守']")
        # bbs_login_button_loc=(By.CLASS_NAME,"roll-nav")
        user_login_success_loc = (By.CLASS_NAME, "font-bold")
        login_null_loc = (By.CSS_SELECTOR,'[type*=red]')
    
        # def bbs_login(self):
        #     self.find_element(*self.bbs_login_user_loc).click()
        #     sleep(1)
        #     self.find_element(*self.bbs_login_button_loc).click()
    
        login_username_loc=(By.ID,"LoginName")
        login_password_loc = (By.ID, "PassWord")
        login_button_loc = (By.ID, "submit")
    
        #登录用户名
        def login_username(self,username):
            self.find_element(*self.login_username_loc).send_keys(username)
    
        # 登录密码
        def login_password(self, password):
            self.find_element(*self.login_password_loc).send_keys(password)
    
        # 点击登录按钮
        def login_button(self):
            self.find_element(*self.login_button_loc).click()
    
        #定义统一登录入口
        def user_login(self,username="",password=""):
            '''
            用获取到的用户名密码登录
            :param username:
            :param password:
            :return:
            '''
    
            self.open()
            #self.bbs_login()
            self.login_username(username)
            self.login_password(password)
            self.login_button()
            sleep(1)
    
    
        #用户名错误提示
        def user_error_hint(self):
            sleep(3)
            return self.switch_to_alert().text
        #用户名为空提示
        def user_error_null(self):
            sleep(3)
            return  self.find_element(*self.login_null_loc).text
        # 密码错误提示
        def pawd_erroe_hint(self):
            sleep(3)
            return self.switch_to_alert().text
        #密码为空提示
        def pawd_error_null(self):
            sleep(3)
            return  self.find_element(*self.login_null_loc).text
        #登录成功用户名
        def user_login_success(self):
            return  self.find_element(*self.user_login_success_loc).text
    
    #login_sta.py
    
    from time import sleep
    import unittest, random, sys
    sys.path.append("./model")
    sys.path.append("./page_obj")
    from model import myunit, function,driver
    from page_obj.login_page import Login
    
    class loginTest(myunit.MyTest):
        '''
        登录测试
        '''
    
        #测试用户登录
        def user_login_verify(self,username="",password=""):
            Login(self.driver).user_login(username,password)
    
        def test_login1(self):
            '''
            用户名,密码为空
            :return:
            '''
            self.user_login_verify()
            po = Login(driver)
            self.assertEqual(po.user_error_null(),"请输入用户名!")
            self.assertEqual(po.pawd_erroe_null(),"请输入密码!")
            function.insert_img(self.driver,"user_pawd_empty.jpg")
    
        def test_login2(self):
            '''
            用户名正确,密码为错误
            :return:
            '''
            self.user_login_verify(username="15912345678",password="111111")
            po = Login(self.driver)
            self.assertEqual(po.pawd_erroe_hint(),"错误的帐号或密码")
            function.insert_img(self.driver,"pawd_empty.jpg")
    
        def test_login3(self):
            '''
            用户名为错误,密码正确
            :return:
            '''
            self.user_login_verify(username='15911111111',password="123456")
            po = Login(self.driver)
            self.assertEqual(po.user_error_hint(), "错误的帐号或密码")
            function.insert_img(self.driver,"user_empty.jpg")
    
        def test_login4(self):
            '''
            用户名和密码不匹配
            :return:
            '''
            self.user_login_verify(username='15987654321', password="123456")
            po = Login(self.driver)
            self.assertEqual(po.user_error_hint(),"错误的帐号或密码")
            function.insert_img(self.driver,"user_pawd_error.jpg")
    
        def test_login5(self):
            '''
            用户名、密码正确
            :return:
            '''
            self.user_login_verify(username="15912345678",password="123456")
            sleep(5)
            po = Login(self.driver)
            self.assertEqual(po.user_login_success(),"15912345678")
            function.insert_img(self.driver,"login_success.jpg")
    
    if __name__=="__main__":
        unittest.main()
    
    #run_bbs_test.py
    
    from HTMLTestRunner import HTMLTestRunner
    from email.mime.text import MIMEText
    from email.header import Header
    import smtplib
    import unittest
    import time
    import os
    
    #=================定义发送邮件===========================
    def send_main(file_new):
        f = open(file_new , 'rb')
        mail_body = f.read()
        f.close()
    
        msg = MIMEText(mail_body , 'html' , 'utf-8' )
        msg['Subject'] = Header ('自动化测试报告' , 'utf-8')
    
        smtp = smtplib.SMTP()
        smtp.connect("smtp.126.com")
        smtp.login( "username@126.com" , "123456" )
        smtp.sendmail("username@126.com" , "receive@126.com" , msg.as_string())
        smtp.quit()
        print("email has out ! ")
    
    #=================查找最新测试报告===========================
    
    def new_report(testreport):
        lists = os.listdir(testreport)
        lists.sort(key=lambda fn: os.path.getmtime(testreport + "\" + fn))
        file_new = os.path.join(testreport , lists[-1])
        print(file_new)
        return file_new
    
    if __name__ == "__main__":
        now = time.strftime("%Y-%m-%d %H_%M_%S")
        filename = "./bbs/report/" + now + "result.html"
        fp = open(filename , 'wb')
        runner = HTMLTestRunner(stream = fp , title = "魅族社区自动化测试报告" , description = "环境 : Windows 7 浏览器 : Chrome")
        discove = unittest.defaultTestLoader.discover("./bbs/test_case" , pattern="*_sta.py")
        runner.run(discove)
        fp.close() # 关闭生成的报告
        file_path = new_report("./bbs/report") #查找新生的报告
        send_main(file_path) #调用发邮件模块
    

      

    目前未解决问题:

            1.登陆账户或者密码为空时,提示语的捕捉尚未成功

            2.密码或账户错误时,弹出的提示框的捕捉,驱动的带入问题

            3.整体框架尚未吃透,理解还有欠缺

            4.邮件模块未做调整,还存在问题

            5.分布式搭建无法完成,不加上hub和node节点,单纯使用selenium_server是可以成功的

    目前已解决问题:

            1.分布式无法运行,解决方式:删去hub和node节点,直接运行在本机,待代码调试完成后再回头研究

            2.参考的魅族社区设计已变更,根据测试网站的相应调整已结束,账号密码正确的成功登录已完成

            3.web端元素的捕捉熟练度大大增长,find_element_by和BY.用法已经熟然于心

    版本二目标:

            1.整体运行成功不报错

  • 相关阅读:
    sql优化
    一些有用的单词(1)
    用到的 Sed 注解
    终端工具注册码
    nginx四层、七层负载均衡配置示例
    http 状态码
    04. Golang 数据类型
    03. Golang 特性
    02. Go 命令
    01. GOPATH 目录结构划分的两种风格
  • 原文地址:https://www.cnblogs.com/keima/p/10537507.html
Copyright © 2011-2022 走看看