zoukankan      html  css  js  c++  java
  • 自动化测试Cypress(三)

     前段时间完成一块测试,记录下写cypress的记录

      1,cy.wait()   等待

            (1)1000等于1秒,此指令我用于两个场景比较多,第一个场景只用于等待时间,比如以下这种场景,当你点击 Hover me 的时候,下面的二级菜单才会显示出来,但是如果二级菜单不是写固定的,而是接口式的。这样点击 Hover me 的时候,如果数据没有及时显示出来,这样测试就会报错,告诉你没有找到二级菜单的元素。这个时候可以用cy.wait() 来等待一下,等待几秒钟之后,再去找二级菜单的元素。

     

       (2) 第二个场景经常用于调用接口。和cy.server()和cy.route() 一起使用的时候。比如如下这种场景

       

          一般项目里面就有这种场景,点击一个按钮的时候,出来一个警告信息,比如提交成功或者提交失败的警示信息。 失败和成功是两个接口,你需要调用接口的时候,把成功的提示信息和失败的提示信息在测试里面的显示出来的时候,就需要用到cy.server() 和cy.route() 和cy.wait() 的结合。

        cy.server():启动服务器以开始将响应路由到cy.route()网络并更改网络请求的行为。

        cy.route(); 使用cy.route管理网络请求。

        如果你不写cy.server() 后面的cy.route() 是没有效果的。在cy.route() 里面设置好请求头和接口的地址,通过as()重新命令一个别名。

       后续使用cy.wait()可以等待这个请求。

    cy.server({
      headers: {
        'x-token': 'abc-123-foo-bar'
      }
    })
    
    cy.route('GET', '/users/1', { id: 1, name: 'Amanda' }).as('getUser')
    cy.visit('/users/1/profile')
    cy.wait('@getUser').its('responseHeaders')
      .should('have.property', 'x-token', 'abc-123-foo-bar') // true

     2 关于cy.route()   请求

        可以在你写的测试用例的文件夹下建一个一个routes.js 文件,里面可以专门用来写你的route的配置。

     

     图一为Cypress.env() 需要定义一个环境变量,再定义一个判断的值,用 cosnt 定义一个Response ,里面 可以根据code,title和message来进行定义和判断。我定义的code为0和其他,依此来判断是请求成功和失败的参数。

    图二为顶一个route。.as() 是给此路由一个别名,我的.as()的别名和const的定义名字是一样的,cy.route 里面 

       method 为请求的方式,url为请求的地址,reponse 后面是图一你定义的Response.SUCCES。来确定此路由是成功的还是失败的。

    图三是你在你的测试js文件里面引入,当前文件的上面要用 import {}from './routes' 进行引入。

    必须要用cy.server 作为开头,后面cy.visitWithBeforeLoad() 后面进入的一个路径,个人理解是有些接口我们需要先调用,所有先进入这个路径,把相关的接口调用出出来,有的需要有的不需要,如果不需要,cy.server()后面的就是你route的别名,这样就完成了。cy.route()没有完全理解,先记录一下,后续彻底理解了,会单独再写一篇。

    二 。语法规范

           (1)使用cy.wait() 的时候,在你的文件最开头要开一段话    

                 /* eslint-disable cypress/no-unnecessary-waiting */

           如果不加的话,那么你提交代码的时候,git就会报错,而且必须是 /* */  不能是//  

          (2)cy.get() 获取标签的时候,不能使用UI的类名,因为会获取到多个,所以尽量不要使用UI的类名,可以使用cy.get(div[class = ""]) 类似 于这种减少获取多个的可能性,保证唯一性。另外有很多class名字是那种随时的,就是那种每次网页一刷新,class名字就是变化的,这种class名字大多就有自己的特点,例如  index____开头  后面也是____  中间的名字不会换,那这样你可以用 cy.get('div[class *= "" ]')  来获取。

         (3)写的测试用例的文件夹名字和测试里面每一块语义化,需要让别人知道你的这个文件夹用来测试什么的,每一块是用来干什么。

  • 相关阅读:
    Using zend-paginator in your Album Module
    Using zend-navigation in your Album Module
    Unit Testing a zend-mvc application
    Conclusion
    Forms and actions
    Database and models
    Routing and controllers
    Modules
    Java开发的基础条件:
    com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 数据库报错
  • 原文地址:https://www.cnblogs.com/shijiu1919/p/12354023.html
Copyright © 2011-2022 走看看