大家好,现在有个情况是这样的,我在写公司 app 的脚本。之前我用 monkeyrunner 实现了基本的流程,脚本是一次性跑完所有的 case 的。
但是我学了 appium 后,写了个脚本,发现脚本每次运行一个函数都会调用 setup() 里的登录功能。。。也就是说,我每次运行脚本里的一个函数,我都会点击 home 键后重新登录。
我现在想跟 monkeyrunner 一样,登录操作只做一次,然后按照顺序运行脚本里的函数
我的脚本代码如下~当然测试报告是 ok 的

#coding=utf-8

import os
import unittest,sys,time,re,datetime,HTMLTestRunner
from appium import webdriver
from time import sleep
from appium.common.exceptions import NoSuchContextException
import sys

#reload(sys)
#sys.setdefaultencoding("utf-8") 

# Returns abs path relative to this file and not cwd
PATH = lambda p: os.path.abspath(
    os.path.join(os.path.dirname(__file__), p)
)

class ContactsAndroidTests(unittest.TestCase):
    def setUp(self):
        desired_caps = {}
        desired_caps['platformName'] = 'Android'
        desired_caps['platformVersion'] = '4.3'
        desired_caps['deviceName'] = '192.168.56.101:5555'
        '''desired_caps['app'] = PATH(
            '../../../sample-code/apps/ContactManager/ContactManager.apk'
        )'''
        desired_caps['appPackage'] = 'com.jiudao.ccare'
        desired_caps['appActivity'] = '.StartActivity'
        desired_caps["unicodeKeyboard"] = "True"
        desired_caps["resetKeyboard"] = "True"


        self.driver = webdriver.Remote('http://192.168.10.156:4723/wd/hub', desired_caps)
        self.driver.implicitly_wait(1)

        #登录操作
        time.sleep(3)
        username=self.driver.find_element_by_id("com.jiudao.ccare:id/user_name")
        username.clear()
        username.send_keys("suser@umser")
        #assertThat(username.get_attribute("text"),equalTo("suser@umser"));  
        #校验
        #text=username.text
        self.assertEqual("suser@umser",username.get_attribute("text"),"username error")
        password=self.driver.find_element_by_id("com.jiudao.ccare:id/user_password")
        password.clear()
        password.send_keys("1")
        #self.assertEqual("杭州市",text2,"parent error")
        #勾选记住密码框
        self.driver.find_element_by_id("com.jiudao.ccare:id/keep_password").click()
        #勾选自动登录
        #self.driver.find_element_by_id("com.jiudao.ccare:id/auto_login").click()
        #进行登录
        self.driver.find_element_by_id("com.jiudao.ccare:id/login").click()
        time.sleep(4)

    def tearDown(self):
        self.driver.close_app()
        self.driver.quit()

    #首页操作
    def homePage(self):
        """首页操作"""
        #左上角的首页控件
        e1=self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'首页')]").text
        self.assertEqual("首页",e1,"username error")
        #左下角的首页控件
        e2=self.driver.find_element_by_id("com.jiudao.ccare:id/main_activity_rb_one")
        e23=e2.text
        self.assertEqual("首页",e23,"username error")
        e2.click()
        time.sleep(1)

    #服务管理-等待处理事件数模块
    def wait(self):
        """服务管理-等待处理事件数模块"""
        time.sleep(1)
        self.driver.find_element_by_id("com.jiudao.ccare:id/main_activity_rb_two").click()
        self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'等待处理事件数')]").click()
        #进入第一个事件
        time.sleep(1)
        #self.driver.find_element_by_xpath("//android.widget.LinearLayout[contains(@index,0)]").click()
        self.driver.find_element_by_xpath("//android.widget.ListView/android.widget.LinearLayout[contains(@index,0)]").click()
        #资产信息
        time.sleep(0.5)
        self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'资产信息')]").click()
        #基本信息
        self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'基本信息')]").click()
        #历史信息
        self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'历史信息')]").click()
        #事件处理
        self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'事件处理')]").click()
        #状态弹出框
        self.driver.find_element_by_id("com.jiudao.ccare:id/fragment_event_deal_state").click()
        time.sleep(1)
        self.driver.find_element_by_xpath("//android.widget.CheckedTextView[contains(@text,'处理中')]").click()
        #输入反馈信息
        #self.driver.find_element_by_id("com.jiudao.ccare:id/fragment_event_deal_content").send_keys("你好")
        #self.driver.find_element_by_id("com.jiudao.ccare:id/fragment_event_deal_send").click()
        self.driver.find_element_by_xpath("//android.widget.ImageButton[contains(@content-desc,'转到上一层级')]").click()
        time.sleep(0.5)
        self.driver.find_element_by_xpath("//android.widget.ImageButton[contains(@content-desc,'转到上一层级')]").click()

    #服务管理-正在处理事件数模块
    def process(self):
        """服务管理-正在处理事件数模块"""
        time.sleep(1)
        self.driver.find_element_by_id("com.jiudao.ccare:id/main_activity_rb_two").click()
        self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'正在处理事件数')]").click()
        #进入第一个事件
        time.sleep(1)
        #self.driver.find_element_by_xpath("//android.widget.LinearLayout[contains(@index,0)]").click()
        self.driver.find_element_by_xpath("//android.widget.ListView/android.widget.LinearLayout[contains(@index,0)]").click()
        #资产信息
        time.sleep(3)
        self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'资产信息')]").click()
        #基本信息
        self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'基本信息')]").click()
        #历史信息
        self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'历史信息')]").click()
        #事件处理
        self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'事件处理')]").click()
        #状态弹出框
        self.driver.find_element_by_id("com.jiudao.ccare:id/fragment_event_deal_state").click()
        self.driver.find_element_by_xpath("//android.widget.CheckedTextView[contains(@text,'处理中')]").click()
        #输入反馈信息
        #self.driver.find_element_by_id("com.jiudao.ccare:id/fragment_event_deal_content").send_keys("")
        #self.driver.find_element_by_id("com.jiudao.ccare:id/fragment_event_deal_send").click()
        self.driver.find_element_by_xpath("//android.widget.ImageButton[contains(@content-desc,'转到上一层级')]").click()
        time.sleep(0.5)
        self.driver.find_element_by_xpath("//android.widget.ImageButton[contains(@content-desc,'转到上一层级')]").click()

    #服务管理-已完成事件数模块
    def completed(self):
        """服务管理-已完成事件数模块"""
        time.sleep(1)
        self.driver.find_element_by_id("com.jiudao.ccare:id/main_activity_rb_two").click()
        self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'已完成事件数')]").click()
        #进入第一个事件
        time.sleep(1)
        #self.driver.find_element_by_xpath("//android.widget.LinearLayout[contains(@index,0)]").click()
        self.driver.find_element_by_xpath("//android.widget.ListView/android.widget.LinearLayout[contains(@index,0)]").click()
        #资产信息
        time.sleep(0.5)
        self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'资产信息')]").click()
        #基本信息
        self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'基本信息')]").click()
        #历史信息
        self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'历史信息')]").click()
        #事件处理
        self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'事件处理')]").click()
        #状态弹出框
        self.driver.find_element_by_id("com.jiudao.ccare:id/fragment_event_deal_state").click()
        self.driver.find_element_by_xpath("//android.widget.CheckedTextView[contains(@text,'完成')]").click()
        #输入反馈信息
        #self.driver.find_element_by_id("com.jiudao.ccare:id/fragment_event_deal_content").send_keys("")
        #self.driver.find_element_by_id("com.jiudao.ccare:id/fragment_event_deal_send").click()
        self.driver.find_element_by_xpath("//android.widget.ImageButton[contains(@content-desc,'转到上一层级')]").click()
        time.sleep(0.5)
        self.driver.find_element_by_xpath("//android.widget.ImageButton[contains(@content-desc,'转到上一层级')]").click()

    #退出操作
    def exitAccount(self):
        """退出操作"""
        #进入关于蕴客界面
        time.sleep(2)
        e3=self.driver.find_element_by_id("com.jiudao.ccare:id/main_activity_rb_four")
        e3.click()
        #点击检查更新按钮
        update=self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'检查更新')]")
        update.click()
        #点击退出按钮账号按钮
        exit=self.driver.find_element_by_id("com.jiudao.ccare:id/fragment_about_out_login")
        exit.click()


if __name__ == '__main__':
    suite = unittest.TestSuite()
    #suite.addTest(ContactsAndroidTests("login"))
    suite.addTest(ContactsAndroidTests("homePage"))
    suite.addTest(ContactsAndroidTests("wait"))
    suite.addTest(ContactsAndroidTests("process"))
    suite.addTest(ContactsAndroidTests("completed"))
    suite.addTest(ContactsAndroidTests("exitAccount"))
    timestr = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))
    filename = "D:\\appium\\appiumresult\\result_" + timestr + ".html"
    print (filename)
    fp = open(filename, 'wb')
    runner = HTMLTestRunner.HTMLTestRunner(
                stream=fp,
                title='测试结果',
                description='测试报告'
                )
    #suite = unittest.TestLoader().loadTestsFromTestCase(ContactsAndroidTests)
    #unittest.TextTestRunner(verbosity=2).run(suite)
    runner.run(suite)
    #g_browser.quit()
    fp.close() #测试报告关闭



↙↙↙阅读原文可查看相关链接,并与作者交流