精华内容
下载资源
问答
  • web自动化测试框架
    千次阅读
    2021-06-10 20:31:46

    1.什么是框架?     

    框架(framework)是一个框子——指其约束性,也是一个架子——指其支撑性。是一个基本概念上的结构,用于去解决或者处理复杂的问题。          

    框架是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。          

    框架,其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。简单说就是使用别人搭好的舞台,你来做表演。

    2.为什么使用框架?     

    1)自己从头实现太复杂     

    2)使用框架能够更专注于业务逻辑,加快开发速度     

    3)框架的使用能够处理更多细节问题     

    4)使用人数多,稳定性,扩展性好

    3.Selenium工作原理 webdriver工作原理

    selenium环境搭建

    1.材料:          

    1)python3.7     

    2)Firefox35(大于43)     

    3)selenium2框架         稳定版 2.48.0    (pip install selenium==2.48.0)     

    4)浏览器驱动 

    Selenium

    Selenium的IDE(集成开发环境)是一个易于使用的Firefox插件,用于开发Selenium测试案例。它提供了一个图形用户界面,用于记录使用Firefox浏览器,用来学习和使用Selenium用户操作,但它只能用于只用Firefox浏览器不支持其它浏览器。

    IDE功能简介

    1.文件:创建、打开和保存测试案例和测试案例集。编辑:复制、粘贴、删除、撤销和选择测试案例中的所有命令。Options : 用于设置seleniunm IDE。

    2.用来填写被测网站的地址。

    3.速度控制:控制案例的运行速度。

    4.运行所有:运行一个测试案例集中的所有案例。

    5.运行:运行当前选定的测试案例。

    6.暂停/恢复:暂停和恢复测试案例执行。

    7.单步:可以运行一个案例中的一行命令。

    8.录制:点击之后,开始记录你对浏览器的操作。

    9.案例集列表。

    10.测试脚本;table标签:用表格形式展现命令及参数。source标签:用原始方式展现,默认是HTML语言格式,也可以用其他语言展示。

    11.查看脚本运行通过/失败的个数。

    12.当选中前命令对应参数。

    13.日志/参考/UI元素/Rollup

    浏览器驱动对象        

     1)库的导入       

     from selenium import  webdriver        

     2)创建浏览器对象                  

    driver = webdriver.xxx()                   

    使用dir(driver)查看方法     

    3)浏览器尺寸相关操作                  

    maximize_window()        最大化                

     get_window_size()        获取浏览器尺寸         

    set_window_size()        设置浏览器尺寸

     

    浏览器位置相关操作                          

    get_window_position()        获取浏览器位置         

    set_window_position(x,y)        设置浏览器位置                  

    注:显示器以左上角为(0,0),所有的位置操作都是相对于显示器左上角展开的位移操作,单位是像素。     

    浏览器的关闭操作                

     close()            关闭当前标签/窗口         

    quit()            关闭所有标签/窗口

    页面请求操作

    driver.get(url)        请求某个url对应的响应         

    refresh()                刷新页面操作         

    back()                回退到之前的页面         

    forward()                前进到之后的页面

    获取断言信息        

     0)什么是断言?       

    断言是编程术语,表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真,可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言而在部署时禁用断言。          

    1)获取断言信息的操作       

    current_url                获取当前访问页面url       

    title                获取当前浏览器标题         

    get_screenshot_as_png()           保存图片         

    get_screenshot_as_file(file)       直接保存                

    page_source                  网页源码

    元素的定位              

    1)元素定位方法的分类(调用方式):                  

    1.直接调用型(推荐方式)             

    driver.find_element_by_xxx(value)                  

    2.使用By类型(需要导入By)             

    from selenium.webdriver.common.by import By             

    driver.find_element(By.xxx,value)

    元素定位方法的分类(按定位方式):

    八种定位方式的示例:

    1. driver.find_element_by_xpath(value)                      

    2. driver.find_element_by_css_selector(value)              

    3. driver.find_element_by_id(value)                          

    4. driver.find_element_by_name(value)

    5. driver.find_element_by_class_name(value)                    

    6. driver.find_element_by_tag_name(value)             

    7. driver.find_element_by_link_text(value)                      

    8. driver.find_element_by_partial_link_text(value)

    元素的操作              

    对元素的相关操作,一般要先获取到元素,再调用相关方法     element = driver.find_element_by_xxx(value)          

    1)点击和输入         点击操作             element.click()                  

    清空/输入操作(只能操作可以输入文本的元素)             element.clear()            

    清空输入框             element.send_keys(data)        输入数据

    多标签之间的切换     

    场景:有的时候点击一个链接,新页面并非由当前页面跳转过去,而是新开一个页面打开,这种情况下,计算机需要识别多标签或窗口的情况。          

    1)获取所有窗口的句柄         

    handles = driver.window_handlers()         

    调用该方法会得到一个列表,在selenium运行过程中的每一个窗口都有一个对应的值存放在里面。     

    2)通过窗口的句柄进入的窗口         

    driver.switch_to_window(handles[n])                  

    driver.switch_to.window(handles[n])         

    通过窗口句柄激活进入某一窗口

    多表单切换     

    在网页中,表单嵌套是很常见的情况,尤其是在登录的场景     

    1)什么是多表单?         

    实际上就是使用iframe/frame,引用了其他页面的链接,真正的页面数据并没有出现在当前源码中,但是在浏览器中我们看到,简单理解可以使页面中开了一个窗口显示另一个页面     

    2)处理方法                

     直接使用id值切换进表单             

    driver.switch_to.frame(value)/driver.switch_to_frame(value)         

    定位到表单元素,再切换进入             

    el = driver.find_element_by_xxx(value)             

    driver.switch_to.frame(el)    /driver.switch_to_frame(el)

    多表单切换举例:

    弹出框操作          

    1) 进入到弹出框中         driver.switch_to.alert     

    2) 接收警告         accept()     

    3) 解散警告         dismiss()     

    4) 发送文本到警告框         send_keys(data)

    鼠标和键盘操作     

    手动测试时键盘的操作在selenium页有实现,关于鼠标的操作由ActionChains()类来提供,关于键盘的操作由Key()类来提供     

    1)鼠标操作    

    导入动作链类,动作链可以储存鼠标的动作,并一起执行         

    from selenium.webdriver import ActionChains         

    ActionChains(driver)                      

    鼠标右击             

    el = driver.find_element_by_xxx(value)             

    context_click(el)             

    对el执行右击         

    执行ActionChains中储存的所有动作             

    perform()

    鼠标和键盘操作     

    1)键盘操作         

    键盘操作使用的是Keys类,一般配合send_keys使用       

    导入         

    from selenium.webdriver.common.keys import Keys       

    常用键盘操作             

    send_keys(Keys.BACK_SPACE)     删除键(BackSpace)                          

    send_keys(Keys.SPACE)         空格键(Space)                        

    send_keys(Keys.TAB)             制表键(Tab)                          

    send_keys(Keys.ESCAPE)         回退键(Esc)                          

    send_keys(Keys.ENTER)         回车键(Enter)                          

    send_keys(Keys.CONTROL,‘a’)     全选(Ctrl+A)

     常用键盘操作             

    send_keys(Keys.CONTROL,‘a’)     全选(Ctrl+A)                          

    send_keys(Keys.CONTROL,‘x’)     剪切(Ctrl+X)                          

    send_keys(Keys.CONTROL,‘v’)     粘贴(Ctrl+V)                          

    send_keys(Keys.F1)             键盘 F1             

    ……             

    send_keys(Keys.F12)             键盘 F12

    浏览器等待          

    1) 为什么要进行等待?                  

    1.网速慢         

    2.网站内容过多         

    3.如果不进行等待而直接定位元素,可能会抛出异常   

     2) selenium中等待的分类:                  

    显示等待                  

    隐式等待

    显示等待         

    显示等待是根据条件进行等待,等待条件出现                  

    实现:             

    from selenium.webdriver.common.by import By             

    from selenium.webdriver.support.ui import WebDriverWait             

    from selenium.webdriver.support import expected_conditions as EC       

     WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)                                                         

    WebDriverWait类是由WebDirver 提供的等待方法。在设置时间内,         

    默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常。                  

    WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located( (By.CLASS_NAME,"g-hu")))

    隐式等待       

    隐式等待是根据是件进行等待,等待特定时间             

    driver.implicitly_wait(n)         

    n的单位为秒,n为最大值,在这个最大值内只要该界面上的全部元素都加载完成定就结束没有加载出元素就抛出    

    NosuchException.          

    优先 隐式等待     

    次之 显式等待 最次 固定等待

     

    更多相关内容
  • WebWEB开源Web自动化测试框架——Watir试用手记软件测试Watir是一个使用Ruby实现的开源Web自动化测试框架,相对于那些庞大的商业工具来说,它很小巧,也很灵活,提供的功能也足够用。最近抽时间试用了一下,感觉还...
  • 自己写Web自动化测试框架!得几年前一本《自己动手写操作系统》在全国的技术范围内引起了学习操作系统的热潮。我不才在这里使用这本书的大名,来分享一下我在写Web自动化测试框架上面的一些经验。  记得几年前一本...
  • 首先定义一下Web自动化测试框架Web自动化测试框架是一个类库,他可以帮助测试人员快速写出Web自动化测试代码,并帮助测试人员在自动化报错的时候快速找到Bug。目前市场上成熟的Web自动化测试框架有不少,很出名的...
  • WebWEB自己动手写Web自动化测试框架6-自动化测试框架的规划软件测试从今天开始,我们正式进入自动化测试框架的编写中。首先我们先进行需求分析:我们到底要什么样的自动化测试框架?正如第一篇《自己动手写Web自动化...
  • PatatiumWebUi 简介 这是一个WebUI自动化测试框架,由 webdriver中文社区 创办人土豆(本人技术笔名)所创建,该web自动化测试框架是用java语言编写的,基于seleniumwebdriver的开源自动化测试框架,该框架结合了...
  • 3)前面所学的web自动化测试和app自动化测试都是通过界面操作,都属于UI自动化测试。接口测试没有界面,则不属于UI自动化测试。 4)基本原理:以页面(页面的一部分)为单位,把所有用到的页面都分别定义成定义成一...
  • WebWEB自己动手写Web自动化测试框架5-判断浏览器是否加载完成软件测试上面的几次课程中,我们介绍了如何打开浏览器,如何获取每个web控件的信息,并且控制并验证他们。从上面的文章中,我相信大家已经可以写出简单的...
  • Selenium是一个基于浏览器的自动化测试工具,它提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分:Selenium IDE、Selenium WebDriver 和Selenium Grid。 Selenium IDE:Firefox的...

    一、首先你得知道什么是Selenium?

    Selenium是一个基于浏览器的自动化测试工具,它提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分:Selenium IDE、Selenium WebDriver 和Selenium Grid。

    • Selenium IDE:Firefox的一个扩展,它可以进行录制回放,并把录制的操作以多种语言(例如java、python等)的形式导出成测试用例。

    • Selenium WebDriver:提供Web自动化所需的API,主要用作浏览器控制、页面元素选择和调试。不同的浏览器需要不同的WebDriver。

    • Selenium Grid:提供了在不同机器的不同浏览器上运行selenium测试的能力。

    下面我会教大家如何运用Python结合Selenium WebDriver库搭建web自动化测试框架。

    二、自动化测试框架由什么组成?

    一个典型的自动化测试框架一般包括用例管理模块、自动化执行控制器、报表生成模块和log模块,这些模块相辅相成。
    在这里插入图片描述

    接下来介绍各模块的逻辑单元:

    1、用例管理模块

    用例管理模块包括新增、修改、删除等操作单元,这些单元又会涉及到用例书写模式,测试数据库的管理、可复用库等。

    2、自动化控制器

    控制器是自动化用例执行的组织模块,主要是负责以什么方法执行我们的测试用例.

    3、报表生成模块

    主要负责执行用例后的生成报告,一般以HTML格式居多,信息主要是用例执行情况。另外还可以配置发送邮件功能。

    4、log模块

    主要用来记录用例执行情况,以便于高效的调查用例失败信息以及追踪用例执行情况。

    三、自动化框架怎么去设计和实现?

    1、需求分析

    首先我们的测试对象是一个web平台,基于此平台设计的框架要包含测试用例管理、测试执行控制器、测试报告以及测试日志的生成。

    2、设计和实现

    页面管理

    假设测试web对象为一个典型单页面应用,所以我们采用页面模式。页面模式是页面与测试用例之间的纽带,它将每个页面抽象成一个单独的类,为测试用例提供页面元素的定位和操作。 BaseClass作为父类只包含driver成员变量,用来标识Selenium中的WebDriver,以便在子类中定位页面元素。LoginClass和PageClass作为子类,可以提供页面元素的定位和操作方法。比如登录页面。
    在这里插入图片描述
    从页面看,需要操作的元素分别为:登录用户名、密码、下次自动登录和登录按钮。具体实现代码如下:
    页面父类BaseClass.py

    在这里插入图片描述

    LoginClass继承自BaseClass,并进行登录的元素定位以及操作实现。代码中定位了username和password,并添加了设置用户名和密码的操作。
    在这里插入图片描述
    公共库模块
    公共库模块是为创建测试用例服务的,主要包括常量、公共函数、日志、报告等。
    Common.py
    在这里插入图片描述
    测试用例信息类用来标识测试用例,并且包括执行用例、执行结果信息,主要包括以下字段。
    在这里插入图片描述
    日志主要用来记录测试用例执行步骤及产生的错误信息,不同的信息有不同的日志级别,比如Information、Warning、Critical和Debug。由于每个测试用例产生的日志条目比较少,所以在测试框架中只利用了最高级别的日志打印,即Debug级别,该级别也会将其他所有的日志级别的信息同样打印出来。在具体的实现中引用了Python标准库中的logging类库,以便更方便的控制日志输出。

    测试用例仓库

    用例仓库主要用来组织自动化测试用例。每条测试用例都被抽象成一个独立的类,并且均继承自unittest.TestCase类。 Python中的unittest库提供了丰富的测试框架支持,包括测试用例的setUp和tearDown方法,在实现用例的过程中可以重写。依托页面管理和公共库模块实现的页面方法和公共函数,每一个测试用例脚本的书写都会非常清晰简洁。
    在这里插入图片描述

    从这个测试用例中,我们可以看到

    • Setup中定义了执行测试用例前的一些实例化工作

    • tearDown对执行完测试做了清理和写日志文件工作

    • 测试步骤、测试数据和测试检查点非常清晰,易修改(比如用户名密码)

    • 日志级别仅有Debug,所以写日志仅需用同一Log方法

    3、用例执行模块

    如果对软件测试、接口测试、自动化测试、面试经验交流。感兴趣可以273462828,群内会有不定期的发放免费的资料链接,这些资料都是从各个技术网站搜集、整理出来的,如果你有好的学习资料可以私聊发我,我会注明出处之后分享给大家。

    执行模块主要用来控制测试用例脚本的批量执行,形成一个测试集。用例的执行引用了Python标准库中的subprocess来执行nosetests的shell命令,从而执行给定测试用例集中的用例。测试用例集是一个简单的纯文本文件,实现过程中利用了.txt文件testcases.txt。
    在这里插入图片描述

    用例前没有“#“标记的测试用例脚本会被执行,而有”#“标记的则会被忽略,这样可以很方便的控制测试集的执行,当然也可以创建不同的文件来执行不同的测试集。

    四、需要改进的模块

    对于现有实现的测试框架,已经可以满足web对象的自动化需求,但还是有些可以改进提高的地方,比如:

    • 部分用例可以尝试数据驱动。

    • 二次封装selenium的By函数,以便更高效定位元素。

    • 没有进行持续化集成。

    五、总结

    基于Selenium实现的web自动化测试框架不仅轻量级而且灵活,可以快速地开发自动化测试用例,结合本篇的框架设计和一些好的实践,希望对大家以后的web自动化框架的设计和实现有所帮助。

    资源分享

    最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走
    在这里插入图片描述
    这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助…….
    在这里插入图片描述

    展开全文
  • Web自动化测试框架 架构的设计 生生不息原创自己动手写 Web自动化测试框架7 -框 架架构的设计 上次我们分析了什么是我们想要的自动化测试框架这 一次我们基于上一次的分析来设计我们的自动化测试框架 架构该文档为...
  • 基于Ruby的Web自动化测试框架平台应用.pdf
  • 通过对传统自动化测试框架的理论研究,在开源工具的基础上设计了Web自动化测试框架(Web Automated Testing Framework,简称WATF). WATF分为管理层和执行层,每一层都采用了模块化设计思想,抽象度高,易用性好,...
  • 基于Selenium的Web自动化测试框架优化及应用研究.pdf
  • 基于Selenium的Web自动化测试框架的设计与实现.pdf
  • 一种基于Selenium与Unittest的Web自动化测试框架.pdf
  • 测试小白,想问下web自动化测试下的Selenium2 和Robot Framework 和Macaca有什么关系, 都有些什么优缺点呢?求大神指点下
  • Web自动化测试框架搭建:内含自动化测试理念介绍及分层的自动化测试框架搭建,整个自动化测试采用CI管理
  • 基于Ruby的Web自动化测试框架平台应用.rar
  • 基于python+Selenium+PHP+Ftp实现的轻量级web自动化测试框架
  • web自动化测试框架搭建(python+selenium+pytest+pom+ddt)

    千次阅读 多人点赞 2021-04-30 09:00:41
    selenium是一个开源的web ui自动化测试工具,详细就不再过多介绍了。 二、环境搭建 关于环境搭建,非常简单,可以参考我之前的博客。selenium新手入门 三、po设计 po(pom)模式:页面对象模型,把项目中的页面,封装...

    本篇文件利用当下流行的pom设计模式设置测试框架,编写测试用例,生成测试报告,并最终jenkins集成。

    一、selenium

    selenium是一个开源的web ui自动化测试工具,详细就不再过多介绍了。

    二、环境搭建

    关于环境搭建,非常简单,可以参考我之前的博客。selenium新手入门

    三、po设计

    po(pom)模式:页面对象模型,把项目中的页面,封装成一个一个类,一个页面对应一个类。再通过实例化这个类的对象,去调用类里面的属性和方法。
    好处:
    提高代码维护
    代码重复利用

    3.1 po分层

    3.1.1 基础层:

    基础层:放封装的selenium基础方法
    代码实现:

    
    class BasePage:
    
        def __init__(self,driver):
            self.driver=driver
    
    
        # 打开页面
        def into_testin(self,url):
            self.driver.get(url)
    
        # 定位元素
        def locate_element(self,args):
            return self.driver.find_element(*args)
    
        #定位一组元素
        def locate_eles(self,args):
            return self.driver.find_elements(*args)
    
        #输入值
        def input_(self,args,text):
            self.locate_element(args).send_keys(text)
    
        #点击按钮
        def click_button(self,args):
            self.locate_element(args).click()
    

    3.1.2 页面对象层

    页面对象层:pageobject,存放页面的元素定位和操作流程
    登录模块代码实现:

    from time import sleep
    from basepage.base_page import BasePage
    from selenium.webdriver.common.by import By
    
    
    class LoginPage(BasePage):
    
        '''定位页面元素'''
        
        #url
        testin_url='https://www.testin.cn/account/login.htm'
        
        #输入用户名和密码
        username_loc=(By.ID,'email')
        password_loc=(By.ID,'pwd')
    
        #点击登录按钮
        login_button=(By.ID,"submitBtn")
    
        #登录邮箱操作流程
        def testin_login(self,username='18170710339',password='Quyun1230'):
            self.into_testin(self.testin_url)
            sleep(2)
            self.locate_element(self.username_loc).send_keys(username)
            sleep(1)
            self.locate_element(self.password_loc).send_keys(password)
            sleep(1)
            self.click_button(self.login_button)
    

    选择手机代码实现:

    from time import sleep
    from basepage.base_page import BasePage
    from selenium.webdriver.common.by import By
    
    class SelectPage(BasePage):
    
        '''定位页面元素'''
        #定位弹窗
        win_loc=(By.XPATH,"//div[@class='modal-body']/i")
        #定位iphone
        ip_12pro_loc=(By.XPATH,'//div[@id="collapse_1"]/div/dl[1]/dd/div/span[2]/label/span')
        # 定位iphone12 pro max
        ip_loc = (By.XPATH, "//button[@device-source='00008101-0004102C3468001E']")
    
        #定位品牌
        an_loc=(By.XPATH,'//div[@id="collapse_1"]/div/dl[2]/dd/div/span[3]/label/span')
        # 定位安卓魅族
        mz_loc = (By.XPATH, "//button[@device-source='864968050654030']")
    
        #定位上市时间
        onlin_loc=(By.XPATH,'//div[@id="collapse_1"]/div/dl[6]/dd/div/span[5]/label/span')
        # 定位上市时间的华为荣耀
        sj_loc = (By.XPATH, "//button[@device-source='7d22ebd8f913637d']")
    
        #定位文本框
        text_detail=(By.XPATH,'//div[@id="modal_quota_alert"]/div/div/div[2]')
        #定位取消框
        qx_but_loc=(By.XPATH,'//div[@id="modal_quota_alert"]/div/div/div[3]/button[1]')
    
        #点击登录按钮
        login_button=(By.ID,"submitBtn")
    
        #登录邮箱操作流程
        def testin_select_01_iphone(self):
            sleep(1)
            self.locate_element(self.ip_12pro_loc).click()
            sleep(1)
            self.locate_element(self.ip_loc).click()
            sleep(1)
            as_text=self.locate_element(self.text_detail).text
            '''断言信息正确'''
            assert as_text==u'您的配额已不足,是否前往购买?'
            self.locate_element(self.qx_but_loc).click()
            sleep(2)
    
        def testin_select_02_android(self):
            sleep(1)
            self.locate_element(self.an_loc).click()
            sleep(1)
            self.locate_element(self.mz_loc).click()
            sleep(1)
            as_text = self.locate_element(self.text_detail).text
            assert as_text == u'您的配额已不足,是否前往购买?'
            self.locate_element(self.qx_but_loc).click()
            sleep(2)
    
        def testin_select_03_onlin_time(self):
            sleep(1)
            self.locate_element(self.onlin_loc).click()
            sleep(1)
            self.locate_element(self.sj_loc).click()
            sleep(1)
            as_text = self.locate_element(self.text_detail).text
            assert as_text == u'您的配额已不足,是否前往购买?'
            self.locate_element(self.qx_but_loc).click()
            sleep(2)
    

    3.1.3 测试用例层

    测试用例层:存放测试用例及数据
    代码实现:

    import pytest
    from time import sleep
    from selenium import webdriver
    from common.excel import read_excel
    from pageobject.login_page import LoginPage
    from pageobject.select_phone import SelectPage
    
    class TestTestIn:
    
        #打开浏览器
        def setup(self) -> None:
            self.driver=webdriver.Chrome()
            driver=self.driver
    
        def teardown(self) -> None:
            sleep(1)
            self.driver.close()
    
        '''利用excel导入登录测试数据'''
        @pytest.mark.parametrize('case',read_excel('./data/data.xlsx','login'))
        def test_01_login(self,case):
            '''测试登录模块'''
            xh,case_name,username,password,is_exc,result,bz=case
            lp=LoginPage(self.driver)
            lp.testin_login(username,password)
    
        def test_02_select_iphone_12(self):
            '''测试根据品牌选择手机'''
            lp = LoginPage(self.driver)
            lp.testin_login()
            ps=SelectPage(self.driver)
            ps.testin_select_01_iphone()
    
    
        def test_03_select_androi_sys(self):
            '''测试根据安卓系统选择手机'''
            lp = LoginPage(self.driver)
            lp.testin_login()
            ps=SelectPage(self.driver)
            ps.testin_select_02_android()
    
        def test_04_select_online_time(self):
            '''测试根据上市时间来选择手机'''
            lp = LoginPage(self.driver)
            lp.testin_login()
            ps=SelectPage(self.driver)
            ps.testin_select_03_onlin_time()
    
    

    3.1.4 创建测试数据

    登录模块,我们用到了数据驱动,我们先创建一个目录,如data,里面创建一个excel表,添加相应数据,如:
    在这里插入图片描述
    excel表中如下:
    在这里插入图片描述

    3.1.5 创建读取excel目录

    创建一个common目录,再创建一个read_excel的文件:
    在这里插入图片描述
    代码如下:

    import openpyxl
    
    def read_excel(excel_dir,sheet_name):
        '''读取excel'''
    
        #加载目录
        ex=openpyxl.load_workbook(excel_dir)
    
        #获取sheet页
        sheet=ex[sheet_name]
    
        #打印表最大行和列
        # print(sheet.max_row,sheet.max_column)
        # print(sheet.cell(2,1).value)
        #循环行和列
        sheet_list=[]
        for row in range(2,sheet.max_row+1):
            row_list=[]
            for col in range(1,sheet.max_column+1):
                row_list.append(sheet.cell(row,col).value)
            sheet_list.append(row_list)
        return sheet_list
    
    if __name__ == '__main__':
        read_excel('../data/data.xlsx','login')
    

    3.2 生成测试报告

    3.2.1 创建报告目录

    本次我们使用pytest测试框架,所以,当然使用allure测试报告了。如果不熟悉allure报告的朋友,可以参考我上一篇详细的介绍:单元测试框架–pytest从入门到精通2021最新教程
    先创建两个目录:一个临时目录:temp和存放测试报告的reports:
    在这里插入图片描述

    3.2.2 创建报告配置文件

    新建一个pytest.ini的文件:

    [pytest]
    #
    addopts=-vs --alluredir ./temp
    testpaths=./testcase
    python_files=test_*.py
    python_classes=Test*
    python_functions=test_*
    
    

    3.3 运行测试

    根据上面的操作,最终会形成这样的目录:
    在这里插入图片描述

    3.3.1 运行用例:

    创建一个run_test.py文件:

    import os
    import pytest
    from time import sleep
    
    if __name__ == '__main__':
        pytest.main()
        sleep(2)
        os.system('allure generate ./temp -o ./reports --clean')
    

    3.3.2 查看运行结果

    3.3.2.1 编辑器中结果

    在这里插入图片描述
    可以看出,结果全部运行通过。

    3.3.2.2 查看测试报告

    查看reports目录中的html测试,用浏览器打开:
    在这里插入图片描述
    在这里插入图片描述
    测试用例全部通过。

    四、jenkins集成

    如果不太熟悉jenkins的朋友,可以参考我之前的博客,有详细搭建教程:jenkins持续集成的使用(含RF自动执行自动化)

    4.1 启动jenkins

    cmd中进入jenkins目录,执行命令:

    java -jar jenkins.war
    

    在这里插入图片描述
    jenkins启动成功

    4.2 创建任务

    进入jenkins,创建一个任务:
    在这里插入图片描述
    添加项目目录:
    在这里插入图片描述
    设置运行命令:
    在这里插入图片描述
    保存,创建成功。
    任务创建成功后, 执行运行操作。
    在这里插入图片描述
    可以看到已经在运行了。
    在这里插入图片描述
    查看运行结果:
    在这里插入图片描述
    运行成功。测试报告,同上,就不再次看了。

    展开全文
  • 基于Selenium的Web自动化测试框架的设计与实现.rar
  • 二、自动化测试框架 三、自动化框架的设计和实现 四、需要改进的模块 五、总结 一、什么是Selenium? Selenium是一个基于浏览器的自动化测试工具,它提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。...

    目录:导读

    一、什么是Selenium?

    二、自动化测试框架

    三、自动化框架的设计和实现

    四、需要改进的模块

    五、总结


    一、什么是Selenium?

    Selenium是一个基于浏览器的自动化测试工具,它提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分:Selenium IDE、Selenium WebDriver 和Selenium Grid。

    • Selenium IDE:Firefox的一个扩展,它可以进行录制回放,并把录制的操作以多种语言(例如java、python等)的形式导出成测试用例。

    • Selenium WebDriver:提供Web自动化所需的API,主要用作浏览器控制、页面元素选择和调试。不同的浏览器需要不同的WebDriver。

    • Selenium Grid:提供了在不同机器的不同浏览器上运行selenium测试的能力。

    本文将详细介绍如何运用Python结合Selenium WebDriver库搭建web自动化测试框架。

    二、自动化测试框架

    一个典型的自动化测试框架一般包括用例管理模块、自动化执行控制器、报表生成模块和log模块,这些模块相辅相成。

     

    接下来介绍各模块的逻辑单元:

    1、用例管理模块

    用例管理模块包括新增、修改、删除等操作单元,这些单元又会涉及到用例书写模式,测试数据库的管理、可复用库等。

    2、自动化控制器

    控制器是自动化用例执行的组织模块,主要是负责以什么方法执行我们的测试用例.

    3、报表生成模块

    主要负责执行用例后的生成报告,一般以HTML格式居多,信息主要是用例执行情况。另外还可以配置发送邮件功能。

    4、log模块

    主要用来记录用例执行情况,以便于高效的调查用例失败信息以及追踪用例执行情况。

    三、自动化框架的设计和实现

    1、需求分析

    首先我们的测试对象是一个web平台,基于此平台设计的框架要包含测试用例管理、测试执行控制器、测试报告以及测试日志的生成。

    2、设计和实现

    页面管理

    假设测试web对象为一个典型单页面应用,所以我们采用页面模式。页面模式是页面与测试用例之间的纽带,它将每个页面抽象成一个单独的类,为测试用例提供页面元素的定位和操作。

    BaseClass作为父类只包含driver成员变量,用来标识Selenium中的WebDriver,以便在子类中定位页面元素。LoginClass和PageClass作为子类,可以提供页面元素的定位和操作方法。比如登录页面。

    如果你对软件测试、接口测试、自动化测试、面试经验交流感兴趣欢迎加入:软件测试技术群:603401995,群里的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦。

     

    从页面看,需要操作的元素分别为:登录用户名、密码、下次自动登录和登录按钮。具体实现代码如下:

    页面父类BaseClass.py

     

    LoginClass继承自BaseClass,并进行登录的元素定位以及操作实现。代码中定位了username和password,并添加了设置用户名和密码的操作。

     

    公共库模块

    公共库模块是为创建测试用例服务的,主要包括常量、公共函数、日志、报告等。

    Common.py

     

    测试用例信息类用来标识测试用例,并且包括执行用例、执行结果信息,主要包括以下字段。

     

    日志主要用来记录测试用例执行步骤及产生的错误信息,不同的信息有不同的日志级别,比如Information、Warning、Critical和Debug。由于每个测试用例产生的日志条目比较少,所以在测试框架中只利用了最高级别的日志打印,即Debug级别,该级别也会将其他所有的日志级别的信息同样打印出来。在具体的实现中引用了Python标准库中的logging类库,以便更方便的控制日志输出。

    测试用例仓库

    用例仓库主要用来组织自动化测试用例。每条测试用例都被抽象成一个独立的类,并且均继承自unittest.TestCase类。 Python中的unittest库提供了丰富的测试框架支持,包括测试用例的setUp和tearDown方法,在实现用例的过程中可以重写。依托页面管理和公共库模块实现的页面方法和公共函数,每一个测试用例脚本的书写都会非常清晰简洁。

     

    从这个测试用例中,我们可以看到

    • Setup中定义了执行测试用例前的一些实例化工作
    • tearDown对执行完测试做了清理和写日志文件工作
    • 测试步骤、测试数据和测试检查点非常清晰,易修改(比如用户名密码)
    • 日志级别仅有Debug,所以写日志仅需用同一Log方法

    3、用例执行模块

    执行模块主要用来控制测试用例脚本的批量执行,形成一个测试集。用例的执行引用了Python标准库中的subprocess来执行nosetests的shell命令,从而执行给定测试用例集中的用例。测试用例集是一个简单的纯文本文件,实现过程中利用了.txt文件testcases.txt。

     

    用例前没有“#“标记的测试用例脚本会被执行,而有”#“标记的则会被忽略,这样可以很方便的控制测试集的执行,当然也可以创建不同的文件来执行不同的测试集。

    四、需要改进的模块

    对于现有实现的测试框架,已经可以满足web对象的自动化需求,但还是有些可以改进提高的地方,比如:

    • 部分用例可以尝试数据驱动。
    • 二次封装selenium的By函数,以便更高效定位元素。
    • 没有进行持续化集成。

    五、总结

    基于Selenium实现的web自动化测试框架不仅轻量级而且灵活,可以快速地开发自动化测试用例,结合本篇的框架设计和一些好的实践,希望对大家以后的web自动化框架的设计和实现有所帮助。

    展开全文
  • WEB自动化测试框架设计与应用,nh格式文档,软件测试学习
  • github地址: https://github.com/wuranxu/webTest 基于Python的webUI自动化测试框架,支持多平台~带有自动下载chrome驱动功能
  • 启动不同浏览器 说明:在实际自动化测试工作中,肯定不会只打开一种浏览器 前面已经对谷歌浏览器Chrome进行了打开并成功访问百度,接下来是打开IE浏览器,首先需要跟之前Chrome浏览器一样需要下载driver插件,进入...
  • 概述Dagger是网易杭州研究院QA团队开发的一个轻量级、运行稳定的WebUI自动化测试框架,主要基于Selenium及TestNg可以认为是对Selenium进行二次封装的一个框架(俗称造轮子)。之所以把这个轮子开源出来,主要在于经过...
  • 网络自动化测试 一个带有 Java、TestNG、PageObjects、Maven 的 Web 自动化测试框架

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 235,928
精华内容 94,371
关键字:

web自动化测试框架

友情链接: matlab-test.zip