2020年广深小龙最新web、接口自动化测试框架样板

2020年广深小龙最新web、接口自动化测试框架样板。废话不多说,直接看简介:

一、接口自动化测试框架:

**一、简介:**

框架:python3 + request + pytest + yaml + faker

1、host域名配置,config.yaml文件 host: www.xxx.com; 

2、request默认是post请求(如需get请求则写:method: get);

3、xpath:存取你要的值,用来参数化关联(列表形式)写法:"$..dict"
    
    json写法:"$..dictid"
    
    re写法:{"re", "dictid", "invalidxx('(.+?)'\xx)"}

4、支持多个yaml文件的测试用例执行(指定某个yaml文件待实现);
   
5、pytest.ini 默认值:addopts = -s --html=../report/report.html

6、注意json、data的格式,该是什么写什么,例1,json: xxx  例2,data:current=1&size=9999&type=2

7、validators:多个断言
	
	check:   因返回的是result对象,如填写 status_code -->等价于 result.status_code
    selector:断言方式,例1填写==,则exp == xx,例2填写len,则exp == len(xx)
    exp:     断言您的期望的结果

8、引用变量

    xpath变量:意思是你自己存的参数,比如存了token,则这样引用:${token}
    
    系统随机变量(faker随机生成):则这样引用:ppl{xxx},其中xxx为faker的方法,官方请参考:https://faker.readthedocs.io/en/master/locales/zh_CN.html
    
    faker常用部分示例:
        1.随机名字:ppl{name}
            返回结果:苏丽丽
            
        2.随机地址:ppl{address}
            返回结果:北京市建平市南长贾路K座 324786
            
        3.返回随机邮箱:ppl{email}
            返回结果:zhutao@hotmail.com
            
        4.返回随机网址:ppl{uri}
            返回结果:http://82.cn/wp-content/categories/main.html
        
        5.返回当前日期与时间:ppl{date_time_between_dates}
            返回结果:2020-08-01 20:02:12
          返回当前日期:date_between_dates
            返回结果:2020-08-01
            
        6.返回随机日期:ppl{date}
            返回结果:2020-08-01
            
        7.返回随机手机号码:ppl{phone_number}
            返回结果:13815429659
            
        8.返回随机身份证号码:ppl{ssn}
            返回结果:130205195901209552
    
**yaml编写测试用例:**

例子:	

    - url: /xxxxx/login
      json: {"account":"xxxxxxx","pwd":"xxxxxxx"}
      xpath: 
	- "$..token"
	- {"re", "token22", "invalidxx('(.+?)'xx)"}
      validators:
        - {"check": "status_code", "selector": "==", "exp": "200"}
        - {"check": "headers", "selector": "in", "exp": 'application/json'}
        - {"check": "json()", "selector": "len", "exp": "5"}
        - {"check": "json()['data']['customerName']", "selector": "==", "exp": "泡泡龙"}
        - {"check": "text", "selector": "in", "exp": "泡泡龙"}
	- {"check": "text", "selector": "not in", "exp": "广深小龙"}
	    
    - url: /vip/xxx
      json: {"account":"ppl{phone_number}","pwd":"MdQuT595","token":"$token"}
      xpath: "$..jsonpath"
      validators:
        - {"check": "status_code", "selector": "==", "exp": "200"}
	- {"check": "text", "selector": "not in", "exp": "广深小龙"}	
	  
    - url: xxx/xxx
      method: get
      headers:
        authToken: ${token22}
      data: ppl{name}
      validators:
        - {"check": "status_code", "selector": "==", "exp": "200"}
	- {"check": "text", "selector": "not in", "exp": "广深小龙"}

如有其它疑问,欢迎联系广深小龙!!!QQ交流群:482713805

个人博客:https://www.cnblogs.com/gsxl/
	
github:https://github.com/git-gsxl

二、Web自动化测试框架:

** UI自动化简介 **

**重点:元素传参方式(单个/多个)**

一、单个定位:
	
	打开网页连接:loc=("open", "/url/xxlogin")
	
	(程序会根据配置文件config.yaml的host拼接url,如:host/url/xxlogin)
	
	点击:
	
		click:loc="#s-top-left"
		
		click:loc=("id", "s-top-left")
	
	输入:
	
		send: loc=("send", "广深小龙", "#kw") 
		
		send: loc=("send", "广深小龙", "id", "kw")
	
	清空:
		clear: loc=("clear", "#kw")  
		
		clear: loc=("clear", "id", "kw")  
	
	获取元素是否存在:(返回布尔值)
	
		get_ele: loc=("get_ele", "#su") 
		
		get_ele: loc=("get_ele", "id", "su") 
		
	获取元素的文本值:
		
		get_txt:loc=("get_txt", "#s-usersetting-top")
		
		get_txt:loc=("get_txt", "id", "s-usersetting-top")
		
	文本在元素文本值:(部分匹配返回布尔值)
		
		txt_in_ele:loc=("txt_in_ele", "设置", "#s-usersetting-top")   
		
		txt_in_ele:loc=("txt_in_ele", "设置", "id", "s-usersetting-top")
	
	
二、复数定位:

	点击:

		clicks:loc=("0", "#s-top-left") 
		
		clicks:loc=("0", "id", "s-top-left")
	
	输入:
	
		sends: loc=("sends", "广深小龙", "0", "#kw") 
		
		sends: loc=("sends", "广深小龙", "0", "id", "kw")
		
	清空:
	
		clears:loc=("clears", "0", "#kw")  
		
		clears:loc=("clears", "0", "id", "#kw")  


	获取元素是否存在:
	
		get_eles: loc=("get_eles", "0", "#su")
		
		get_eles: loc=("get_eles", "0", "id", "su")
		
	获取元素的文本值:
		
		get_txts:loc=("get_txts", "0", "#s-usersetting-top")
		
		get_txts:loc=("get_txts", "0", "id", "s-usersetting-top")	

三、其它说明


步骤1:(配置文件)

	1. config. yaml 配置好 host (其它配置一般不用动)
	
	2. config. yaml设置 default 定位方式,可自行喜欢设置;


步骤2:(元素定位及方式)

	1.  elements文件夹下新建:ele_login. py文件
	
		用哪种方式看自己喜欢,命名也可以其它命名,注意别与其它模块重复就可。
		
		建议元素写成流程的方式:yield 迭代器接收,让loop方法循环处理操作事件。
	

步骤3:(页面流程编写)

	1.  pages 文件夹下新建:页面文件,如page_login. py
	
	2. 导入基础类Base,让登录的类继承
	
	3.  导入编写元素的类或方法,供页面操作使用
	
	4. 编写操作/输入页面的流程
	
	注意:最好在当前模块下调试封装好的登录或其它流程是否正常
	

步骤4:(基于页面流程组装测试数据)

	1. 导入页面流程的模块:from pages. page_login import Login
	
	2. 导入driver:from common. driver import is_driver
	
	3. setup_class、teardown_class分别为用例执行的前置与后置
		
		前置:driver 驱动打开浏览器
		
		后置:关闭浏览器
		
	4. allure装饰器是用来加入报告中的一些描述之类的,可参考report连接里面的写法
	
	5. 这里的流程基本是:调用页面流程,输入不一样的参数进行测试
	
	6. 补充:比如基础资料测试,那么需要先登录,这里是这样,在用例传入login方法即可,既是先登录成功后,返回driver驱动,给予后面所需传入
	

步骤5:(命令行运行)
	
	1.  打开到用例文件的目录
	
	2.  命令行输入:pytest(会执行目录下所有符合规则的文件,如test_login. py,所以我们用例需要命名为test_xx开头)
	
	3. 命令行输入: pytest test_login. py(单个文件执行)
	
	
步骤6:(查看报告)
	
	1. 直接打开report目录下可直接查看简陋报告
	
	2. allure报告需更多配置或学习,请参考【项目目录简介】中生成allure报告或者自行百度
	
	allure示例链接:http://47.97.194.84:8085
	

** 基类方法简介:**

    0. find:单个元素定位:locator = ("id", "id值")
	
    1. finds:复数元素定位:locator = ("id", "id值")[x],取第几个?
	
    2. send:文本输入
	
    3. click:点击操作
	
    4. clear:清空文本
	
    5. text_in_enement:判断 _text 文本值是否 in 定位元素中,返回 bool 值
	
    6. text_in_enement:
	
    7. get_enement:判断元素是否存在,返回 bool 值
	
    8. get_text:获取元素的文本值
	
    9. now_title:获取当前页面的 title
	
    10. move_element:鼠标悬停操作,传locator
	
    11. select_index:index是索引定位第x个,从0开始,默认第1个
	
    12. select_value:select中的value方法,如html中:value="50",则value传:50
	
    13. select_text:select中的text方法全匹配文本,如html中显示:每页显示50条,则文本需全部匹配
    
	14. switch_iframe:切换iframe:传下标 或 locator
    
	15. is_alert:
            alert弹窗处理_text:
            --1. 默认点击:确定
            --2. 取消操作传:取消
            --3. 获取弹窗文本传:text
            --4. 弹出输入文本传:输入 + 文本值
    
	16. switch_handle:句柄切换,传int类型,从0开始,-1既是最新打开的一个
    
	17. js_top:页面滚动条滑动至顶部
   
    18. js_element:聚焦元素位置,传locator
    
	19. js_tail:页面滚动条滑动至底部
	
    20. screenshot:截图
	
    21. yaml_load:读取yaml文件
	
    22. get:输入打开网址
	
	23. open:输入打开网址
	
	24. quit:关闭浏览器
	
	25. refresh:刷新页面
	
	26. del_cookie:清空缓存
	
	27. location:单个定位,提供step方法调用
	
	28. locations:复数定位,提供step方法调用
	
	29. handle:传参step方法带过来的参数,判断执行
	
	30. step:传参处理,使用这种方式必须按照规则传参
	
	31. loop:循环处理元素操作事件

conftest.py 已封装发生异常截图目录:report/screenshot,以及将截图放入简陋测试报告中;

**登录例子:**
	
	**elements**:登录的元素编写(前面4步骤是登录,5:断言,6:是否退出登录的元素)
	
	def ele_login(user='admin', pwd="123456", exp_name="admin"):
    """todo 打开登录页→输入账号密码→点击登录→断言exo_bane→是否退出登录"""
    yield ("open",
           "/api/login/")
    yield ("send", user,
           'id', 'account')
    yield ("send", pwd,
           'id', 'password')
    yield '//*[@id="login_submit"]'
    yield ("txt_in_ele", exp_name,
           '/html/body/div[2]/div[1]/div[1]')
    yield '/html/body/div[2]/div[1]/div[1]/a'
	
	**pages**:运行前面4步骤:self.loop(loops, 4),默认参数登录成功(5:断言,返回布尔值,6:如果out=1登录成功就退出)
	
    def login_page(self, user="admin", pwd="123456", exp="admin", out=0):
        loops = ele.ele_login(user, str(pwd), exp)
        self.loop(loops, 4)
        time.sleep(1)
        res = self.step(next(loops, None))
        if res and out == 1:
            self.step(next(loops, None))
            return True
        else:
            return False
	
如有其它疑问,欢迎联系广深小龙!!!QQ交流群:482713805

个人博客:https://www.cnblogs.com/gsxl/	

github:https://github.com/git-gsxl

最后欢迎来大家QQ交流群一起学习:482713805

有疑问的小伙伴赶紧进群一起学习吧!!!

github代码传送门:https://github.com/git-gsxl/2020-UI-Api-demo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姚二龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值