暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

pytest+appium简单结合

小二测试成长 2021-08-30
1962

前言:前两篇已经讲解了AppiumDesktop与pytest使用方法,这次我们就使用appium+pytest做个简单自动化。
    这里使用今日头条app作为我们自动化练习对象
一、录制case
1、打开今日头条app、在cmd窗口下输入“adb shell dumpsys window w |findstr \/ |findstr name=”
获取当前界面的app包名以及activity
得知:今日头条打开后包名:com.ss.android.article.news
            activity:com.ss.android.article.news.activity.MainActivity
2、录用例
    1)打开appiumDesktop->点击start inspctor session->设置caps
 
python代码:
caps = {}
caps["platformName"] = "android"
caps["deviceName"] = "toutiao"
caps["appPackage"] = "com.ss.android.article.news"
caps["appActivity"] = ".activity.MainActivity"
caps["noReset"] = "true"
caps["autoGrantPermissions"] = "true"
caps常用参数
名称
描述
填写内容
platformName
操作平台
iOS, Android, or FirefoxOS
deviceName
设备名称
安卓可忽略
appPackage
待测应用包名
待测app包名,例如:com.ss.android.article.news
appActivity
待测应用activity名称
待测appActivity,例如:com.ss.android.article.news.activity.MainActivity
noReset
不重置启动app, 默认为false
true, false   
autoGrantPermissions
安装时自动赋予权限,默认为false
true, false   
这里列出本次写的几个参数,其余参数可上官网查看:https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/caps.md
    2)录测试用例
如何利用appiumDesktop录制用例这里就不说了,这里主要用登录case讲一下:
首先是密码登录流程:打开app->点击我的(未登录)->点击登录->输入手机号
录制出来的python代码:
# This sample code uses the Appium python client
# pip install Appium-Python-Client
# Then you can paste this into a file and simply run with Python
from appium import webdriver
caps = {}
caps["platformName"] = "android"
caps["deviceName"] = "toutiao"
caps["appPackage"] = "com.ss.android.article.news"
caps["appActivity"] = ".activity.MainActivity"
caps["noReset"] = "true"
caps["autoGrantPermissions"] = "true"
driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)
el1 = driver.find_element_by_xpath("/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.TabHost/android.widget.FrameLayout[6]/android.widget.TabWidget/android.widget.RelativeLayout[4]/android.widget.TextView")
el1.click()
el1.click()
el2 = driver.find_element_by_id("com.ss.android.article.news:id/e_o")
el2.click()
el3 = driver.find_element_by_id("com.ss.android.article.news:id/c6")
el3.click()
el3.send_keys("13166666666")
driver.quit()
二、使用pytest改造case
        用例录制完,接下来就到了最重要的利用pytest改造的时间
        既然是利用pytest改造,那就命名规范要按照pytest的方式来
pytest基础:
    1、pytest命名规范
  • 测试文件以test_开头
  • 测试类以Test开头,不能有__init__方法
  • 测试函数以test_开头
    2、setup与teardown方法
  • setup_method是每条用例执行前运行
  • teardown_method是每条用例执行后运行
  • setup_class是每个测试类执行前运行(需要配合@classmethod)
  • teardown_class是每个测试类执行后运行(需要配合@classmethod)
了解以上就差不多会怎么使用pytest了,接下来进行改造
1、新建test_login.py文件,把代码放进去
2、在文件内新建一个class TestToutiaoLogin(object) 类。继承pytest中的object类
3、Desktop录制下来的代码稍微有些复杂,在id定位中“com.ss.android.article.news:id”可以省略掉
    在xpath定位中可以使用文本进行定位“//*[@text='未登录']”,为了防止一个界面有多个一样的文本还可以加上父级“resource-id“进行完整定位
代码:"//*[contains(@resource-id,'tabs')]//*[@text='未登录']"
简单修改代码如下:
# This sample code uses the Appium python client
# pip install Appium-Python-Client
# Then you can paste this into a file and simply run with Python
from appium import webdriver
class Testtoutiaologin(object):
    def setup_method(self):
        pass
    def test_login(self):
        caps = {}
        caps["platformName"] = "android"
        caps["deviceName"] = "toutiao"
        caps["appPackage"] = "com.ss.android.article.news"
        caps["appActivity"] = ".activity.MainActivity"
        caps["noReset"] = "true"
        driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)
        driver.implicitly_wait(10)
        el1 = driver.find_element_by_xpath("//*[contains(@resource-id,'tabs')]//*[@text='未登录']")
        el1.click()
        el1.click()
        el2 = driver.find_element_by_id("e_o")
        el2.click()
        el3 = driver.find_element_by_id("c6")
        el3.click()
        el3.send_keys("13166666666")
        driver.quit()
        
    def teardown_method(self):
        pass
4、可以把打开app的步骤放入setup里面
    首先创建一个启动app的方法,返回driver
    然后在setup里面调用
    最后在teardown里面退出程序
# This sample code uses the Appium python client
# pip install Appium-Python-Client
# Then you can paste this into a file and simply run with Python
from appium import webdriver
class Testtoutiaologin(object):
    def setup_method(self):
        self.driver = self.start_appium()
    def test_login(self):
        el1 = self.driver.find_element_by_xpath("//*[contains(@resource-id,'tabs')]//*[@text='未登录']")
        el1.click()
        el1.click()
        el2 = self.driver.find_element_by_id("e_o")
        el2.click()
        el3 = self.driver.find_element_by_id("c6")
        el3.click()
        el3.send_keys("13166666666")
    def teardown_method(self):
        self.driver.quit()
    def start_appium(self):
        caps = {}
        caps["platformName"] = "android"
        caps["deviceName"] = "toutiao"
        caps["appPackage"] = "com.ss.android.article.news"
        caps["appActivity"] = ".activity.MainActivity"
        caps["noReset"] = "true"
        driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)
        driver.implicitly_wait(10)
        return driver
好了  一个简单的登录case就改造完了,其实改造的空间还有很多,首先就是可以把代码里面的setup方法改成类方法把setup_method修改成退出登录或者返回。当然,还可以多加几条case。
微信号:wsj742769775

-扫码关注我-



文章转载自小二测试成长,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论