• 0
  • 0
分享
  • Appium自动化测试PO模式:短信案例——软件测试圈
  • TIMI 2021-10-20 14:31:36 字数 4362 阅读 1108 收藏 0

PO模式:Page Object,PO模式是自动化测试项目开发实践的最佳设计模式之一。

核心思想:通过对界面元素的封装减少冗余代码,同时在后期维护中,若元素位置发生变化,只需要调整页面封装的代码,提高测试用例的可维护性、可读性。

优点: 

  • 减少了冗余代码

  • 业务代码和测试代码被分开,降低耦合性

  • 维护成本低

缺点:

  • 结构复杂:基于流程做了模块化的拆分

案例一:自动发送短信

方法:Appium+PO模式+Pytest框架数据参数化

模块分布

1.jpg

  • base模块:前置代码和基本操作,base_driver.py对应打开driver,base_action.py对应元素定位、点击按钮和输入。

  • page模块:对应操作页面,考虑手指测试的过程需要用到多少个页面,就在page模块中创建多少个文件。page.py统一入口,有多少个页面,就写多少个函数,并创建对应的对象。

  • scripts模块:测试脚本。

  • pytest.ini:配置文件。

base_action.py:

from selenium.webdriver.support.wait import WebDriverWait
 
class BaseAction:
 
    def __init__(self, driver):
        self.driver = driver
 
    def find_element(self, location, timeout=10, poll=1):
        """
        :param location: 元素位置
        :param timeout: 设置10秒
        :param poll: 多少秒找一次
        :return:
        """
        location_by, location_value = location
        wait = WebDriverWait(self.driver, timeout, poll)
        return wait.until(lambda x: x.find_element(location_by, location_value))
 
    def find_elements(self, location, timeout=10, poll=1):
        location_by, location_value = location
        wait = WebDriverWait(self.driver, timeout, poll)
        return wait.until(lambda x: x.find_elements(location_by, location_value))
 
    def click(self, location):
        self.find_element(location).click()
 
    def input(self, location, text):
        self.find_element(location).send_keys(text)

base_driver.py

from appium import webdriver
 
def init_driver():
    desired_caps = dict()
    # 设备信息
    desired_caps["platformName"] = "Android"
    desired_caps["platformVersion"] = "5.1"
    desired_caps["deviceName"] = "192.168.56.101:5555"
    # app信息
    desired_caps["appPackage"] = "com.android.mms"
    desired_caps["appActivity"] = ".ui.ConversationList"
 
    return webdriver.Remote("http://127.0.0.1:4723/wd/hub",desired_caps)

message_list_page.py

from selenium.webdriver.common.by import By
 
from base.base_action import BaseAction
 
class MessageListPage(BaseAction):
    # 新建短信按钮
    new_message_button = By.ID, "com.android.mms:id/action_compose_new"
 
    def click_new_message(self):
        self.click(self.new_message_button)

new_message_page.py

from selenium.webdriver.common.by import By
 
from base.base_action import BaseAction
 
class NewMessagePage(BaseAction):
    # 接受者特征
    recipients_edit_text = By.ID, "com.android.mms:id/recipients_editor"
    # 内容特征
    content_edit_text = By.ID, "com.android.mms:id/embedded_text_editor"
    # 发送按钮
    send_button = By.XPATH, "//*[@content-desc='发送']"
 
    def input_recipients(self, text):
        self.input(self.recipients_edit_text, text)
 
    def input_content(self, text):
        self.input(self.content_edit_text, text)
 
    def click_send(self):
        self.click(self.send_button)

page.py

from page.message_list_page import MessageListPage
from page.new_message_page import NewMessagePage
 
class Page:
 
    def __init__(self, driver):
        self.driver = driver
 
    @property
    def message_list(self):
        return MessageListPage(self.driver)
 
    @property
    def new_message(self):
        return NewMessagePage(self.driver)
test_message.py
import time
import pytest
from base.base_driver import init_driver
from page.page import Page
  
class TestMessage:
 
    def setup(self):
        self.driver = init_driver()
        self.page = Page(self.driver)
 
    def teardown(self):
        time.sleep(3)
        self.driver.quit()
 
    @pytest.mark.parametrize(('phone', 'content'), [('18588888888', "HELLO"),('18577778888', "您好!")])
    def test_send_message(self, phone, content):
        # 主页-点击短信,新建短信
        self.page.message_list.click_new_message()
        # 新建短信-输入 接收人
        self.page.new_message.input_recipients(phone)
        # 新建短信-输入 内容
        self.page.new_message.input_content(content)
        # 新建短信-点击发送
        self.page.new_message.click_send()
 
if __name__ == '__main__':
    pytest.main([])

pytest.ini

[pytest]
# 添加命令行参数
addopts = -vs --html=report/report.html --reruns 0
# 文件搜索路径
testpaths = ./scripts
# 文件名称
python_files = test_*.py
# 类名称
python_classes = Test*
# 方法名称
python_functions = test_*

Readme

短信案例
 
需求:
在《短信》应用中,进入发送短信页面,在姓名和内容栏中,输入对应的数据,并点击发送。
包名界面名:com.android.mms/.ui.ConversationList
发送短信页面标识:resource-id,com.android.mms:id/action_compose_new
接收者标识:resource-id,com.android.mms:id/recipients_editor
内容标识:resource-id,com.android.mms:id/embedded_text_editor
发送按钮标识:content-desc,发送
 
数据:
[18588888888, HELLO]
[18577778888, 您好!]

运行test_message.py

11.jpg

作者:不拿大场offer不改名

原文链接:https://blog.csdn.net/qq_37089829/article/details/119709665

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   一、越权漏洞  越权访问(Broken Access Control,简称BAC)是Web应用程序中一种常见的漏洞,由于其存在范围广、危害大,被OWASP列为Web应用十大安全隐患的第二名。所谓越权,顾名思义即超过当前用户的权力范围,越至不同用户或获得更高的系统权限的一类漏洞。具体到应用当中,当服务器处理用户发起的请求时,没有对该用户的操作权限进行判定,从而导致不法分子利用该漏洞篡改用户信息,达到增删改查的目的。该类漏洞在当前的测试中可通过Fiddler手工测试或Appscan自动扫描测试。越权漏洞一般可分为两类,即水平越权和垂直越权。  1.水平越权:水平越权是指角色权限相同的用户之间能...
            0 1 1818
            分享
          • 三年前的AlphaGo是人工智能发展史上的里程碑事件,当时人工智能首次击败了围棋高手,令很世界为之一震,从那时起人类就逐步进入了人工智能时代。而如今, 我们正迈向人工智能的“新时代”,在这个年代里面,无论是国际巨头,还是国内的BAT,都把人工智能列为了最核心的战略。今天,无论走到哪里,哪个会议都在讨论人工智能,人工智能时代已远远超过之前我们提到的大数据和移动互联网时代。在这个时代面前,不仅仅是几大知名的IT巨头,多个领域上千家的创业公司正风起云涌,越来越多的实用性产品早已应需而生, 例如我们熟悉的智能家居,智能炒菜,智能管家等,每一个都能直接改变传统的物质世界。怎么办?行业大佬们尚且如此,作为...
            1 2 1853
            分享
          •  最近在逛ProductHurt时,发现一些好玩又有趣的API,你可能会觉得花里胡哨,but 作为开发者也需要乐趣的!当然调试API离不开API管理工具,随手也给大家安利一个最近很热门的接口管理工具:Apifox(apifox.cn)?️ ClearbitClearbit提供了网站Logo访问API,只要你输入你想要寻找网站图标的域名,就可以返回域名的相关logo图片~以前要去爬域名的图标,还要浏览器右键点击查看,然后选择元素找到logo的位置,现在找logo图标链路是不是缩短了!API接口:GET https://logo.clearbit.com/:domain比如我最近访问的几...
            9 9 844
            分享
          •   今天我们就来看看常见的几个疑惑的职业生涯迷茫的问题  1、我是半路出家,其他行业转到测试的,是不是很减分  回答:给大家讲个实际情况:我曾经的培训班同学中,计算机相关专业毕业的,只有10%左右,而从毕业就开始做测试的,当时全班就我自己。  其他同学原来干什么的都有,有做导游的,有做美容讲师的,有做微商的,有饭店服务员,有理发师,有快递小哥,还有的是街溜子,混混,家里蹲,未成年等等,他们都未曾放弃过,花着2万的学费去学基础入门知识三个月,照样出去干。  还有不少大神,比如粉丝群里的某神,之前是流水线工人。某大佬,连高中文凭都没有。某哥,之前摆地摊的才从事测试1年。而他们现在的薪资都是30w,...
            0 0 860
            分享
          •   前言  最近呢有很多的小伙伴问我有没有什么软件测试的面试题,由于笔者之前一直在忙工作上的事情,没有时间整理面试题,刚好最近休息了一下,顺便整理了一些面试题,现在就把整理的面试题分享给大家,废话就不多说了直接进入正文哈。  1、网上银行转账是怎么测的,设计一下测试用例。  回答思路:  宏观上可以从质量模型(万能公式)来考虑,重点需要测试转账的功能、性能与安全性。设计测试用例可以使用场景法为主,先列出转账的基本流和备选流。然后设计场景,最后根据场景设计数据。实际面试中需要举出具体的例子。  ·先检查界面  ·再测试功能:  验证同行转账,跨行转账。  验证转账限额。  验证非法账户(挂失,冻...
            0 0 3910
            分享
      • 51testing软件测试圈微信