Yaml数据驱动应用

Yaml数据驱动应用 

目标集成Pytest完成测试任务

- 测试项目 

业务:
    1.进入设置点击搜索按钮
    2.输入搜索内容
    3.点击返回

- 目录结构 

    App_Project # 项目名称
      - Basic # 存储基础设施类
          - __init__.py # 空文件
          - Init_Driver.py # 手机驱动对象初始化
          - Base.py # 方法的二次封装
          - read_data.py #数据解析读取方法
      - Page # 存储封装页面文件
          - __init__.py # 存储页面元素
          - search_page.py # 封装页面元素的操作方法
      - Data # 存储数据文件
          - search_data.yaml(也可以是其他文件比如txt,excel,json,数据库等)
      - Test # 存储测试脚本目录
          - test_search.py # 测试搜索文件
      - pytest.ini # pytest运行配置文件

- 前置条件 

1.手机驱动对象独立 
2.方法的二次封装 
3.完成页面的封装 

- 待完成任务 

1.编写数据驱动文件search_data.yaml
2.编写解析yaml文件类/方法
3.编写测试脚本

- 编写search_data.yaml 

search_test_001: # 用例编号
  input_text: "你好" # 测试输入数据
search_test_002:
  input_text: "1234"
search_test_003:
  input_text: "*&^%"

- 编写解析yaml方法 

read_data.py

import yaml,os
class Read_Data:
    def __init__(self,file_name):
        '''
            使用pytest运行在项目的根目录下运行,即App_Project目录
            期望路径为:项目所在目录/App_Project/Data/file_name
        '''
        self.file_path = os.getcwd() + os.sep + "Data" + os.sep + file_name 
    def return_data(self):
        with open(self.file_path,'r',encoding='UTF-8') as f:
            data = yaml.load(f,Loader=yaml.FullLoader) # 读取文件内容
            return data

    # data:{"search_test_001":{"input_text": "你好"},"search_test_002":{"input_text": "1234"},"search_test_003":{"input_text": "*&^%"}}

- 测试脚本编写 

test_search.py

import sys,os
# 因为需要在项目的根目录下运行,所以需要添加python包搜索路径
# pytest命令运行路径:App_Project目录下
# os.getcwd(): App_Project所在目录/App_Project
sys.path.append(os.getcwd())

# 导入封装好的页面类
from Page.search_page import Search_Page
# 导入独立的手机驱动对象
from Basic.Init_Driver import init_driver
from Basic.read_data import Read_Data
import pytest
def package_param_data():
    list_data = [] # 存储参数值列表,格式[(用例编号1,输入内容2),(用例编号1,输入内容2)...]
    yaml_data = Read_Data("search_data.yaml").return_data() # 返回yaml文件读取数据
    for i in yaml_data.keys():
        list_data.append((i,yaml_data.get(i).get('input_text'))) # list_data中添加参数值
    return list_data

class Test_Search:
    '''
        我们希望测试函数运行多次,不希望每运行一次做一次初始化和退出,
        所以使用setup_class,teardown_class,
        测试类内只运行一次初始化和结束动作.
    '''
    def setup_class(self):
        self.driver = init_driver()

    @pytest.mark.parametrize('test_id,input_text',package_param_data()) # 参数传递三组参数,会运行三次
    def test_search(self,test_id,input_text):
        # 示例化页面封装类
        sp = Search_Page(self.driver)
        # 调用操作类
        print("test_id:",test_id)
        sp.input_search_text(input_text)
        # 退出driver对象

    def teardown_class(self):
        self.driver.quit()

- pytest的配置文件 

pytest.ini

[pytest]
addopts = -s  --html=./report.html
# 测试路径
testpaths = ./Test
# 测试文件名
python_files = test_*.py
# 测试类名
python_classes = Test_*
# 测试的方法名
python_functions = test_*

- 项目运行 

1.启动appium 服务:地址 127.0.0.1 端口 4723
2.启动模拟器
3.进入项目根目录:App_Project
4.命令行输入pytest运行测试

- 测试报告
  ![search报告](/Users/Yoson/Desktop/MobileTestNote/%E7%AC%94%E8%AE%B0/%E7%A7%BB%E5%8A%A8%E7%AB%AF%E6%B5%8B%E8%AF%95_image/search%E6%8A%A5%E5%91%8A.png)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值