我的app自动化实战练习一
''' -*- coding: utf-8 -*-
@Time : 2019/6/10 0010 10:39
@Author : 无邪
@File : test_data.py
@Software: PyCharm'''
'''测试用例'''
data_error=[{"tel":"","pwd":"1","expected":"手机号码或密码不能为空"},
{"tel":"1","pwd":"1","expected":"手机号码格式不正确"},
{"tel":"18438662004","pwd":"1","expected":"密码格式不正确"},
{"tel":"18438662004","pwd":"123456","expected":"错误的账号信息"},
{"tel":"18258148335","pwd":"","expected":"手机号码或密码不能为空"},
{"tel":"","pwd":"","expected":"手机号码或密码不能为空"}
]
data_right=[ {"tel":"18258148335","pwd":"148335","expected":"无邪妖君"}]
-----------------------------------------------------------------------------------------------
''' -*- coding: utf-8 -*-
@Time : 2019/6/10 0010 9:37
@Author : 无邪
@File : base.py
@Software: PyCharm'''
from appium.webdriver import Remote
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.remote.webelement import WebElement
'''这是一个基础信息存放类'''
class Base:
def __init__(self):
caps={
"platformName": "Android", # 平台名称
"platformVersion": "5.1.1", # 系统版本
"deviceName": "127.0.0.1:62001", # 设备名称
'automationName':'uiautomator2',#定位toast必须配置uiautomator2
# "app":"D:\Future-release-2018.apk",
"appActivity": ".activity.MainActivity",
"appPackage": "com.lemon.lemonban" # 包名
}
self.driver=Remote('http://127.0.0.1:4723/wd/hub',caps)
# return self.driver
def wait_element(self,located)->WebElement:
w=WebDriverWait(driver=self.driver,timeout=6)
return w.until(ec.presence_of_element_located(located))
def wait_one(self,located)->WebElement:
"""定位tost"""
w=WebDriverWait(driver=self.driver,timeout=8,poll_frequency=0.01)#默认是0.5秒
return w.until(ec.presence_of_element_located(located))#located传进来是个元组
''' -*- coding: utf-8 -*-
@Time : 2019/6/10 0010 9:35
@Author : 无邪
@File : login.py
@Software: PyCharm'''
# from selenium.webdriver.common.by import By
import time
from appium.webdriver.common.mobileby import MobileBy as By
from page.base import Base
class Login(Base):
"""登录界面元素定位"""
login1=(By.ID,"com.lemon.lemonban:id/fragment_my_lemon_avatar_layout")#点击头像
tel=(By.ID,"com.lemon.lemonban:id/et_mobile")#手机号码输入框
password=(By.ID,"com.lemon.lemonban:id/et_password")#密码输入框
login_buttons=(By.ID,"com.lemon.lemonban:id/btn_login")#登录按钮
button33 = (By.ID, "com.lemon.lemonban:id/navigation_my")#我的柠檬
def image_login(self):
"""定位点击头像登录"""
self.button3()#点击我的柠檬
time.sleep(2)
self.wait_element(self.login1).click()#点击头像登录
def phone(self):
"""定位手机号码输入框"""
return self.wait_element(self.tel)
def pwd(self):
"""定位密码输入框"""
return self.wait_element(self.password)
def login_button(self):
"""点击登陆按钮"""
self.wait_element(self.login_buttons).click()
def start_login(self,call,passwd):
"""输入登录信息进行登录"""
self.phone().send_keys(call)
self.pwd().send_keys(passwd)
def button3(self):
"""定位我的柠檬"""
return self.wait_element(self.button33).click()
def hint(self,t):
"""定位toast"""
if self.wait_one((By.XPATH, "//*[contains(@text,'{}')]".format(t))):
return self.wait_one((By.XPATH, "//*[contains(@text,'{}')]".format(t))).text
else:
return "定位失败"
---------------------------------------------------------------------------------------------------------
''' -*- coding: utf-8 -*-
@Time : 2019/6/10 0010 11:13
@Author : 无邪
@File : test_login.py
@Software: PyCharm'''
from page.login import Login
from data.test_data import data_error,data_right
import pytest
import time
class TestLogin:
"""测试登陆"""
logins = Login()
time.sleep(2)
logins.image_login()
@pytest.mark.wrong
@pytest.mark.parametrize("data",data_error)
def test_error_login(self,data):
"""反向用例登陆"""
self.logins.start_login(data["tel"],data["pwd"])
time.sleep(2)
self.logins.login_button()
# fact_result=self.logins.hint()#实际结果
fact_result = self.logins.hint(data["expected"])
print(fact_result)
try:
assert (fact_result==data["expected"])
print("用例比对通过,实际结果{}与预期结果{}一致".format(fact_result, data["expected"]))
except AssertionError as e:
print("用例比对失败,实际结果{}与预期结果{}不符".format(fact_result,data["expected"]))
raise e
@pytest.mark.parametrize("data",data_right)
@pytest.mark.right
def test_right_login(self,data):
self.logins.start_login(data["tel"],data["pwd"])
self.logins.login_button()
执行结果:
E:\lemon>pytest -m wrong -s
====================================================================== test session starts ======================================================================
platform win32 -- Python 3.6.3, pytest-4.5.0, py-1.8.0, pluggy-0.11.0
rootdir: E:\lemon
plugins: metadata-1.8.0, html-1.20.0, allure-pytest-2.6.3
collected 7 items / 1 deselected / 6 selected
test_login.py 手机号码或密码不能为空
用例比对通过,实际结果手机号码或密码不能为空与预期结果手机号码或密码不能为空一致
.手机号码格式不正确
用例比对通过,实际结果手机号码格式不正确与预期结果手机号码格式不正确一致
.密码格式不正确
用例比对通过,实际结果密码格式不正确与预期结果密码格式不正确一致
.错误的账号信息
用例比对通过,实际结果错误的账号信息与预期结果错误的账号信息一致
.手机号码或密码不能为空
用例比对通过,实际结果手机号码或密码不能为空与预期结果手机号码或密码不能为空一致
.手机号码或密码不能为空
用例比对通过,实际结果手机号码或密码不能为空与预期结果手机号码或密码不能为空一致
.
我的app自动化实战练习一的更多相关文章
- 基于UiAutomator2+PageObject模式开展APP自动化测试实战
前言 在上一篇<APP自动化测试框架-UiAutomator2基础>中,重点介绍了uiautomator2的项目组成.运行原理.环境搭建及元素定位等基础入门知识,本篇将介绍如何基于uiau ...
- Selenium2学习-039-WebUI自动化实战实例-文件上传下载
通常在 WebUI 自动化测试过程中必然会涉及到文件上传的自动化测试需求,而开发在进行相应的技术实现是不同的,粗略可划分为两类:input标签类(类型为file)和非input标签类(例如:div.a ...
- 关于《精通移动App测试实战:技术、工具和案例》图书勘误信息
首先,对由于我们工作的疏忽向<精通移动App测试实战:技术.工具和案例>读者朋友们表示歉意,同时已将这些问题反馈给了出版社编辑同志,再版时将会统一修正: 其次,勘误信息请参看附件pdf文档 ...
- Selenium2学习-035-WebUI自动化实战实例-033-页面快照截图应用之三 -- 区域截图(专业版)
之前有写过两篇博文讲述了 WebUI 自动化测试脚本中常用的截图方法,敬请参阅如下所示链接: 浏览器显示区域截图 浏览器指定区域截图 那么当需要截取的区域不在浏览器显示窗口范围之内时,之前的方法显然无 ...
- Selenium2学习-027-WebUI自动化实战实例-025-JavaScript 在 Selenium 自动化中的应用实例之三(页面滚屏,模拟鼠标拖动滚动条)
日常的 Web UI 自动化测试过程中,get 或 navigate 到指定的页面后,若想截图的元素或者指定区域范围不在浏览器的显示区域内,则通过截屏则无法获取相应的信息,反而浪费了无畏的图片服务器资 ...
- Selenium2学习-018-WebUI自动化实战实例-016-自动化脚本编写过程中的登录验证码问题
日常的 Web 网站开发的过程中,为提升登录安全或防止用户通过脚本进行黄牛操作(宇宙最贵铁皮天朝魔都的机动车牌照竞拍中),很多网站在登录的时候,添加了验证码验证,而且验证码的实现越来越复杂,对其进行脚 ...
- Selenium2学习-016-WebUI自动化实战实例-014-Selenium 窗口选择
在日常的 WebUI 自动化测试脚本编写过程中,经常需要打开新的页面,或者在多个打开的页面之间进行切换,以对页面元素进行相应的操作,以模拟用户的行为,实现 UI 的自动化测试.在过往的时间中,经常有初 ...
- Selenium2学习-014-WebUI自动化实战实例-012-Selenium 操作下拉列表实例-div+{js|jquery}
之前已经讲过了 Selenium 操作 Select 实现的下拉列表:Selenium2学习-010-WebUI自动化实战实例-008-Selenium 操作下拉列表实例-Select,但是在实际的日 ...
- Selenium2学习-010-WebUI自动化实战实例-008-Selenium 操作下拉列表实例-Select
此文主要讲述用 Java 编写 Selenium 自动化测试脚本编写过程中,对下拉列表框 Select 的操作. 下拉列表是 Web UI 自动化测试过程中使用率非常高的,通常有两种形式的下拉列表,一 ...
随机推荐
- 【转】在IDEA中创建maven项目
原文地址: https://blog.csdn.net/zzy1078689276/article/details/78732183 现在的JavaWeb项目中,绝大多数都是采用的maven结构的项目 ...
- 任务29:自己动手构建RequestDelegate管道
cmd创建一个控制台应用程序 dotnet new console --name MyPipeline 用VSCode打开这个项目 新建类RequestDelegate.cs的类文件复制Program ...
- CoreBluetooth Central模式 Swift版
也是醉了,CB这个API到现在也没有Swift的文档.最新的文档还是3年前还是4年前的OC版的,被雷的外焦里嫩的.自己一点一点写成Swift还各种报错,最坑的是这些错误压根找不到解决方案.索性自己做个 ...
- 洛谷P2569 [SCOI2010]股票交易(单调队列)
传送门 惭愧……这种题目都没看出来…… 首先,我们用$dp[i][j]$表示在第$i$天,手上有$j$股时的最大收益 第一,我们可以直接买股票,即$dp[i][j]=-j*AP_i$,这个直接计算即可 ...
- NOIp 2014 解方程 【数学/秦九韶算法/大数取膜】By cellur925
题目传送门 题意:求高次方程的解及其个数.其中 1° 我们知道,高次方程是没有求根公式的.但是利用逆向思维,我们可以进行“试根法”,因为题目中给出了所求根的范围.但是多项式系数过于吓人,达到了sxbk ...
- cmd - 批量重命名文件
相信大家或多或少都遇到过类似的情况:从网上下载了好多图片(或者其他的文件),这些图片的名字往往都是些乱七八糟的字母数字的组合,我们想要一次性修改几十张上百张的图片的名字应该怎么办呢? 这里有两种方法, ...
- android 百度地图
展示当前位置地图 参考百度定位demo (LocationDemo) 实现此功能,运行发现 BDLocationListener 的onReceiveLocation方法无法执行,原因是 Androi ...
- Python标准库 os
(掌握os模块,你需要了解Linux或类Unix系统下常用命令的操作) os.name 指示你正在使用的平台.比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix' ...
- AtCoder Grand Contest 013 E - Placing Squares
题目传送门:https://agc013.contest.atcoder.jp/tasks/agc013_e 题目大意: 给定一个长度为\(n\)的木板,木板上有\(m\)个标记点,距离木板左端点的距 ...
- 洛谷 P1892 团伙
P1892 团伙 并查集 #include<cstdio> int fa[2500];//fa[i]表示i的朋友所在集合,fa[i+n]表示i的敌人所在集合 bool boo[2500]; ...