zoukankan      html  css  js  c++  java
  • selenium+python web自动化测试框架项目实战实例教程

      自动化测试对程序的回归测试更方便。 由于回归测试的动作和用例是完全设计好的,测试期望的结果也是完全可以预料的,将回归测试自动运行...
    可以运行更加繁琐的测试 自动化测试的一个明显好处就是可以在很短的时间内运行更多的测试。学习自动化测试最终目的是应用到实际项目中,本篇将介绍大家自动化测试框架:
    • 项目目录结构:
      
    •  基本类模块代码
    #大牛测试
    #qq:2574674466
    #基本类
    from Common.Log import framelog
    class base():
        def __init__(self,driver):
            self.driver = driver
            self.log = framelog().log()
            self.log.info("info")
        #把八大定位放在一个函数里面
        def find_ele(self,dic):
            #传递过来字典第一个即为定位方式
            by =list(dic.keys())[0];
            print("by"+by)
            #传递过来字典第二个为具体的元素
            ele=list(dic.values())[0];
            self.log.info("id")
            self.log.info("元素"+ele)
            try:
                if by == 'id':
                    return self.driver.find_element_by_id(ele)
                elif by == 'name':
                    return self.driver.find_element_by_name(ele)
                elif by == 'className':
                    return self.driver.find_element_by_class_name(ele)
                elif by== 'linktext':
                    return  self.find_element_by_link_text(ele)
                elif by == 'partial':
                    return self.find_element_by_partial_link_text(ele)
                elif by == "css":
                    return  self.driver.find_element_by_css_selector(ele)
                elif by == "xpath":
                    return self.driver.find_element_by_xpath(ele)
                else:
                    return  self.driver.find_element_by_tag_name(ele)
            except:
                return None
        #输入值
        def send_key(self,ele):
            print(ele)
            return  self.find_ele(ele)
    
        #后退
        def back(self):
            self.driver.back()
        #前进
        def forword(self):
            self.driver.forward()
        #当前窗口url
        def url(self):
            self.driver.current_url
    • 数据模块-读取excel操作:
    import  xlrd,os
    #大牛测试
    #qq:2574674466
    #基本类
    #读excel操作、所有数据存放字典中
    #filename为文件名
    #index为excel sheet工作簿索引
    def read_excel(filename,index):
        xls = xlrd.open_workbook(filename)
        sheet = xls.sheet_by_index(index)
        print(sheet.nrows)
        print(sheet.ncols)
        dic={}
        for j in range(sheet.ncols):
    
            data=[]
            for i in range(sheet.nrows):
              data.append(sheet.row_values(i)[j])
            dic[j]=data
        return  dic
    • log模块日志封装:
    #大牛测试
    #qq:2574674466
    #基本类
    import logging,time
    from Common.function import  projectPath
    class framelog():
        def __init__(self, logger=None):
    
    
        # 创建一个logger
            self.logger = logging.getLogger(logger)
            self.logger.setLevel(logging.DEBUG)
        # 创建一个handler,用于写入日志文件
            self.log_time = time.strftime("%Y_%m_%d_")
           #路径需要修改
            self.log_path = projectPath()+"/Logs/"
            self.log_name = self.log_path + self.log_time + 'log.log'
            print(self.log_name)
            fh = logging.FileHandler(self.log_name, 'a', encoding='utf-8')
            fh.setLevel(logging.INFO)
    
        # 定义handler的输出格式
            formatter = logging.Formatter('[%(asctime)s] %(filename)s->%(funcName)s line:%(lineno)d [%(levelname)s]%(message)s')
            fh.setFormatter(formatter)
            self.logger.addHandler(fh)
    
        #  添加下面一句,在记录日志之后移除句柄
    
         #   self.logger.removeHandler(fh)
        # 关闭打开的文件
            fh.close()
    
    
        def log(self):
            return self.logger
    • PO车次预定模块实现:
    #大牛测试
    #qq:2574674466
    #车次预定模块
    from Base.base import  base
    import  time
    class bookPage(base):
        #预定车票
        def book(self):
            return self.by_xpath("//*[@id='tbody-01-K5260']/div[1]/div[6]/div[4]/a")
    
        #动车
        def book_typeD(self):
            return  self.by_css("#resultFilters01 > dl:nth-child(1) > dd.current > label > i")
        # 关闭浮层
        def book_close(self):
            return  self.by_css("#appd_wrap_close")
    
        def book_nologin(self):
            return  self.by_css("#btn_nologin")
    
        def bookBtn(self):
            try:
                time.sleep(7)
                self.book_close().click()
                time.sleep(2)
                self.book().click()
                time.sleep(2)
                self.book_nologin().click()
    
            except:
                self.log.error("车次查询失败")
                None
            return self.dr_url()
    • 测试配置文件:
    [testUrl]
    url = “测试环境url"
    [productUrl]
    url = "生产环境url"
    • 测试用例管理模块
    1. 测试套件管理:
    #大牛测试
    #qq:2574674466
    #测试套件管理
    import unittest
    import HTMLTestRunner
    import  time
    from Common.function import  projectPath
    
    if __name__ == '__main__':
        test_dir=projectPath()+"TestCases"
        tests=unittest.defaultTestLoader.discover(test_dir,
                                                         pattern ='test*.py',
                                                        top_level_dir=None)
        now = time.strftime("%Y-%m-%M-%H_%M_%S",time.localtime(time.time()))
        filepath=projectPath()+"/Reports/"+now+'.html'
        fp=open(filepath,'wb')
        #定义测试报告的标题与描述
        runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title=u'自动化测试报告',description=u'测试报告')
        runner.run(tests)
        fp.close()

    2.测试脚本:

    #_*_coding:utf-8_*_
    #大牛测试
    #qq:2574674466
    #测试用例示例:
    import os,sys
    sys.path.append(os.path.split(os.getcwd())[0])
    import  time,unittest,HTMLTestRunner
    from PageObject.bookPage import bookPage
    from PageObject.orderPage import orderPage
    from PageObject.searchPage import searchPage
    
    from Base.baseUnit import  unitBase
    from selenium import  webdriver
    
    
    class SearchTest(unitBase):
        def test_02(self):
            search = searchPage(self.driver)
            res =search.searchTrain("杭州","上海","2019-05-10")
            #本例断言是根据当前页面的url去判断的
            self.assertIn('TrainBooking',res)
    
        def test_03(self):
            book = bookPage(self.driver)
            res=book.bookBtn()
            self.assertIn("InputPassengers",res)
    
        def test_04(self):
            order = orderPage(self.driver)
            order.userInfo("小王")
    • 项目格式:

    以上为代码级web自动化测试框架,后续将分享无代码自动化测试框架

    全栈自动化测试请联系“大牛测试” ,qq:2574674466,

    公众号:

     

    欢迎加入交流群:Selenium学习群: 628908894
  • 相关阅读:
    python项目打包成exe
    sql同比环比计算
    七款好看文字样式纯css
    一站式智能芯片定制技术
    实战清除电脑上恶意弹出广告窗口
    GAAFET与FinFET架构
    MIPI多媒体接口
    Intel GPU实现游戏与数据中心
    芯片倒爷赚钱术
    Cache Memory技术示例
  • 原文地址:https://www.cnblogs.com/tim2016/p/15368198.html
Copyright © 2011-2022 走看看