第一个appium自动化测试框架

测试框架:

具体代码框架:

以下依次展示每部分的代码编写:

bussis/login-test:

import time
from selenium.webdriver.common.by import By

from config.commen import caps


def login_test(username,password):
    driver=caps()
    driver.find_element(by=By.ID,value="com.to8to.housekeeper:id/launch_rect_skip").click()
    # driver.find_element_by_id("com.to8to.housekeeper:id/launch_rect_skip").click()
    time.sleep(2)
    #选择我的
    # driver.find_element(by=By.CLASS_NAME,value='android.widget.ImageView').click()
    # son='resourceId("com.to8to.housekeeper:id/ttab_own").childSelector(className("android.widget.ImageView"))'
    # driver.find_element_by_android_uiautomator(son).click()
    #最后选择Xpath定位到的 x=955   y=2099
    # driver.find_element_by_xpath("/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.view.ViewGroup/android.view.ViewGroup[5]/android.widget.ImageView").click()
    driver.tap(955,2099)
    #选择立即登录
    driver.find_element(by=By.CLASS_NAME,value="android.widget.TextView").click()
    # driver.find_element_by_class_name("android.widget.TextView").click()
    # #删除手机号
    # driver.find_element(by=By.ID,value="com.to8to.housekeeper:id/module_login_img_reset_account").click()
    # #输入手机号
    # driver.find_element(by=By.ID,value="com.to8to.housekeeper:id/module_login_edit_account").send_keys("15736418790")
    # #获取验证码
    # driver.find_element(by=By.ID,value="com.to8to.housekeeper:id/module_login_txt_countdown").click()
    #点击密码登录
    # driver.find_element(by=By.ID,value="com.to8to.housekeeper:id/module_login_txt_changed_login").click()
    time.sleep(1)
    #输入手机号
    driver.find_element(by=By.ID,value="com.to8to.housekeeper:id/module_login_edit_account").send_keys(username)
    #输入密码
    driver.find_element(by=By.ID,value="com.to8to.housekeeper:id/module_login_edit_password").send_keys(password)
    #勾选协议
    driver.find_element(by=By.ID,value="com.to8to.housekeeper:id/module_login_cb_left").click()
    #点击登录
    driver.find_element(by=By.ID,value="com.to8to.housekeeper:id/module_login_btn_commit").click()
    try:
        driver.find_element_by_xpath('//*[contains(@text,"个人主页")]')
    except:
        print("登录失败")
        return False
    else:
        print("登录成功")
        return True
    # driver.quit()
if __name__ == '__main__':
    login_test("15736418790","test666#")

 config/commen.py:

import os
from time import sleep

import yaml
from selenium.webdriver.common.by import By
from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy

def caps():
    #获取配置文件的目录
    yaml_dir=os.path.dirname(__file__)#当前文件所在目录
    #获取配置文件的完整路径
    yaml_path=os.path.join(yaml_dir,'config.yaml')
    #打开配置文件,读取内容
    yaml_content=open(yaml_path,'r',encoding='utf-8')
    #解析配置文件的内容
    data= yaml.load(yaml_content,Loader=yaml.FullLoader)
    yaml_content.close()

    caps = {}
    # caps["platformName"] = data['platformName']
    # caps["platformVersion"] = data['platformVersion']
    # caps["deviceName"] = data['deviceName']
    caps["platformName"] = "Android"
    caps["appium:platformVersion"] = "10"
    caps["appium:deviceName"] = "e0383ead"
    caps["appPackage"] = "com.to8to.housekeeper"
    caps["appActivity"] = "com.to8to.housekeeper.TLaunchActivity"
    caps["noReset"] = True
    caps["ensureWebviewsHavePages"] = True
    caps["nativeWebScreenshot"] = True
    caps["anewCommandTimeout"] = 3600
    caps["connectHardwareKeyboard"] = True

    driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", caps)
    driver.implicitly_wait(6)
    return driver
if __name__ == '__main__':
    caps()

config/config.yaml:

platformName:Android
platformVersion:10
deviceName:e0383ead

data/login_data.csv:

15736418790,test666#,True
1573641879,test666#,False
15736418790,test666,False
15736418792,test666,False

data/get-csv:


def get_csv_all(csv_file):
    with open(csv_file,'r',encoding='utf-8')as f:
        lines=f.readlines()
        print(lines)
    return lines
if __name__ == '__main__':
    get_csv_all('./login.data.csv')

report查看报告:鼠标右击

  testcase/login_test.py:

import unittest

from bussis.login_test import login_test
from data.get_csv import get_csv_all


class Testlogin(unittest.TestCase):
    #测试开始前执行
    def setUp(self):
        print("开始测试")
    #测试开始后执行
    def tearDown(self):
        print("结束测试")
    def test_login(self):
        #获取文件的路径
        csv_file='../data/login.data.csv'
        #读取文件内容
        data=get_csv_all(csv_file)
        for i in range(len(data)):#数据驱动,直接取data的长度去进行循环
            data1=data[i].split(',')#讲一组数据用逗号分隔成多组数据
        try:
            if data1[2].strip()=='true':
                self.assertTrue(login_test(data1[0],data1[1]))
                #strip函数去除后面的特殊字符,本文中去除\n
            else:
                self.assertFalse(login_test(data1[0],data1[1]))

        except:
            print("本次测试未通过")
        else:
            print("本次测试通过")
if __name__ == '__main__':
    Testlogin()

run/BSTestRunner.py:

下载地址:GitHub - easonhan007/HTMLTestRunner: BSTestRunner is an extension to the Python standard library's unittest module. It generates easy to use HTML test reports.

 下载后将BSTestRunner.py文件复制到pycharm里面

 run/runner.py:

import time
import unittest

from run.BSTestRunner import BSTestRunner


def runner():
    #指定测试用例的目录
    testcase_dir='../testcase'
    #指定测试报告的目录
    report_dir='../report'
    #给测试报告命名
    now=time.strftime('%Y-%m-%d %H-%M-%S')
    report_name=report_dir+'/'+now+'_test_report.html'
    #筛选要执行的测试用例
    testcase=unittest.defaultTestLoader.discover(testcase_dir,pattern='*_test.py')
    #执行用例,生成报告
    with open(report_name,'wb')as f:
        runner=BSTestRunner(stream=f,title='我的测试报告',description='to8to_app')
        runner.run(testcase)

if __name__ == '__main__':
    runner()

猜你喜欢

转载自blog.csdn.net/cxxc980322/article/details/130492798