Python +Appium 实现app自动化测试

这篇具有很好参考价值的文章主要介绍了Python +Appium 实现app自动化测试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Python +Appium 实现app自动化测试


一、Appium简介

Appium是一款开源工具,用于自动化iOS、Android和Windows桌面平台上的本地、移动web和混合应用程序。原生应用是指那些使用iOS、Android或Windows sdk编写的应用。移动网页应用是通过移动浏览器访问的网页应用(appum支持iOS和Chrome上的Safari或Android上的内置“浏览器”应用)。混合应用程序有一个“webview”的包装,这是一个允许与web内容交互的原生控件。像Apache Cordova这样的项目可以很容易地使用web技术构建应用程序,然后将这些技术捆绑到原生包装中,创建一个混合应用程序。

重要的是,Appium是“跨平台”的:它允许您使用相同的API在多个平台(iOS、Android、Windows)上编写测试。这使得代码可以在iOS、Android和Windows测试套件之间重用。

二、环境所需资源

  1. JDK
  2. Android SDK
  3. Python
  4. Pycharm
  5. Appium-Server-GUI
  6. Appium-Inspector

三、环境搭建教程

  1. JDK安装
  2. Android SDK配置
  3. Python安装
  4. PyCharm安装
  5. Appium安装

Appium-Server-GUI 配置Android SDK 和 Java JDK 路径
Python +Appium 实现app自动化测试

Appium-Inspector环境配置
Python +Appium 实现app自动化测试

Appium-Inspector运行Start Session 界面介绍

Python +Appium 实现app自动化测试
Python +Appium 实现app自动化测试

四、注意事项

一、Apium-Server-Gui
	环境变量配置:
	1. Android SDK安装目录;
	2. Java JDK安装目录;

二、Appium-Inspector
	1. 远程路径(Remote Path):/wd/hub 
	2. 高级设置(Advanced Settings):勾选  Allow Unauthorized Certificates,不勾选 Use Proxy

三、手机设置进入开发者选项(开发者模式)
	1. 开发USB调试
	2. 打开USB调试(安全设置)

四、手机安装AppiumSettings
	1. 如果手机是第一次连接appium,会提示下载一个软件【Appium Settings】,正常下载安装即可

五、adb 命令

1. adb devices -l	查看已链接的设备
2. adb shell getprop ro.build.version.release	查看Android内核版本号
3. adb shell dumpsys activity | findstr “mResume” 查看手机屏幕当前应用页面Activity名称已经包名 (window)
4. adb shell dumpsys window | grep mCurrent	查看手机屏幕当前应用页面Activity名称已经包名(mac)

六、python代码


# 新建一个py文件,例如:mi_8se_testapp.py,将下面代码复制粘贴到py文件
import time

from appium import webdriver
# appium 报错 需要安装 Appium-Python-Client;webdriver 报错需要安装 Appium Python Client: WebDriver module
#安装方式 在报错的提示地方点击 install

from appium.webdriver.common.appiumby import AppiumBy

# For W3C actions
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.actions import interaction
from selenium.webdriver.common.actions.action_builder import ActionBuilder
from selenium.webdriver.common.actions.pointer_input import PointerInput

caps = {}
caps["platformName"] = "Android"
caps["appium:platformVersion"] = "10"
caps["appium:deviceName"] = "MI_8_SE"
caps["appium:appPackage"] = "com.app.appnewframe"
caps["appium:appActivity"] = ".activity.LoginActivity"
caps["appium:noReset"] = True
caps["appium:ensureWebviewsHavePages"] = True
caps["appium:nativeWebScreenshot"] = True
caps["appium:newCommandTimeout"] = 3600
caps["appium:connectHardwareKeyboard"] = True
# driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", caps)

# 或者用下面的配置参数
desired_caps = {
    'platformName': 'Android',
    'platformVersion': '10',
    'deviceName': 'MI_8_SE',
    'appPackage': 'com.test.app',
    'appActivity': '.activity.MainActivity',
    'noReset': True
}

driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)
#点击Remote 查看源码,其中 command_executor: str = 'http://127.0.0.1:4444/wd/hub'

driver.find_element(by=AppiumBy.ID, value="et_account").set_text("test@admin.com")
driver.find_element(by=AppiumBy.ID, value="et_pwd").set_text("test 123456")
driver.find_element(by=AppiumBy.ID, value="btn_login").click()


# find_element(by=AppiumBy.ID, value="et_account") , 点击 find_element方法查看源码,by=AppiumBy.ID,value是元素的 id名称
# 搜索完后调用driver.quit()会直接退出app
# input('**********')
# 10秒钟之后退出程序
time.sleep(10)
#搜索完后不会退出app
# driver.quit()

7、TestApp代码

build.gradle代码

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
}

android {
    compileSdk 31

    defaultConfig {
        applicationId "com.test.app"
        minSdk 23
        targetSdk 31
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    // 签名文件别名testapp, 123456,123456

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_11
        targetCompatibility JavaVersion.VERSION_11
    }
    kotlinOptions {
        jvmTarget = '11'
    }
}

dependencies {

    implementation 'androidx.core:core-ktx:1.7.0'
    implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.2.0'
    implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0'
    implementation 'androidx.appcompat:appcompat:1.3.0'
    implementation 'com.google.android.material:material:1.4.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'

}

activity_main.xml布局代码

<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".activity.MainActivity">

    <androidx.appcompat.widget.AppCompatTextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="24dp"
        android:layout_marginTop="30dp"
        android:text="Hello World!"
        android:textColor="@color/black"
        android:textSize="20sp" />

    <androidx.appcompat.widget.AppCompatEditText
        android:id="@+id/et_account"
        android:layout_width="match_parent"
        android:layout_height="46dp"
        android:layout_marginLeft="24dp"
        android:layout_marginTop="100dp"
        android:layout_marginRight="24dp"
        android:hint="请输入手机号或者邮箱"
        android:textColor="@color/black"
        android:textSize="14sp" />

    <androidx.appcompat.widget.AppCompatEditText
        android:id="@+id/et_pwd"
        android:layout_width="match_parent"
        android:layout_height="46dp"
        android:layout_margin="24dp"
        android:hint="请输入6 ~ 20 位密码"
        android:maxLength="20"
        android:inputType="textPassword"
        android:textColor="@color/black"
        android:textSize="14sp" />

    <androidx.appcompat.widget.AppCompatButton
        android:id="@+id/btn_login"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="24dp"
        android:background="@color/black"
        android:gravity="center"
        android:text="登录"
        android:textColor="@color/white"
        android:textSize="20sp" />


</androidx.appcompat.widget.LinearLayoutCompat>

MainActivity.kt代码

package com.test.app.activity

import android.os.Bundle
import android.text.TextUtils
import android.view.Gravity
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.AppCompatButton
import androidx.appcompat.widget.AppCompatEditText
import com.test.app.R
import kotlinx.coroutines.*

class MainActivity : AppCompatActivity() {
    private lateinit var et_account: AppCompatEditText
    private lateinit var et_pwd: AppCompatEditText
    private lateinit var btn_login: AppCompatButton
    private val mainScope = MainScope()
    private var mToast: Toast? = null
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        initView()
        initEvent()

    }

    private fun initView() {
        et_account = findViewById(R.id.et_account)
        et_pwd = findViewById(R.id.et_pwd)
        btn_login = findViewById(R.id.btn_login)
    }

    private fun initEvent() {
        btn_login.setOnClickListener {
            login()
        }
    }

    private fun login() {

        val account = et_account.text.toString()
        if (account.isNullOrBlank()) {
            show("请输入手机号或者邮箱")
            return
        }
        val pwd = et_pwd.text.toString()

        if (pwd.isNullOrBlank()) {
            show("请输入密码")
            return
        }

        if (pwd.length < 5) {
            show("输入密码长度不能小于5位")
            return
        }

        mainScope.launch {
            show("登录中...")
            withContext(Dispatchers.IO) {
                //模拟网络请求耗时操作
                delay(2000)
            }

            if ("test@admin.com".equals(account) && "123456".equals(pwd)) {
                show("登录成功")
            } else {
                show("登录失败")
            }
        }

    }

    fun show(text: CharSequence?) {
        if (TextUtils.isEmpty(text)) return
        mToast?.let {
            it.cancel()
            mToast = null
        }
        mToast = Toast.makeText(this, "", Toast.LENGTH_SHORT)
        mToast?.apply {
            setText(text)
            setGravity(Gravity.CENTER, 0, 0)
            show()
        }

    }

    override fun onDestroy() {
        mainScope.cancel()
        super.onDestroy()
    }

}

8、自动化测试效果图

Python +Appium 实现app自动化测试文章来源地址https://www.toymoban.com/news/detail-407981.html

参考文章

  • Python+Appium从安装到第一个小练习(保姆级别教程)
  • appium——appium环境搭建及使用appium进行APP测试
  • python+Appium 实现app自动化测试详细讲解

到了这里,关于Python +Appium 实现app自动化测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用【Python+Appium】实现自动化测试

    一、环境准备 1.脚本语言:Python3.x    IDE:安装Pycharm 2.安装Java JDK 、Android SDK 3.adb环境,path添加E:SoftwareAndroid_SDKplatform-tools 4.安装Appium for windows,官网地址 Redirecting  点击下载按钮会到GitHub的下载页面,选择对应平台下载   安装完成后,启动Appium,host和port默认的即可,然

    2024年02月08日
    浏览(48)
  • Python+Appium实现自动化测试的使用步骤

    这篇文章主要介绍了Python+Appium实现自动化测试的使用步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 1.脚本语言:Python3.x IDE:安装Pycharm 2.安装Java JDK 、Android SDK 3.adb环境,path添加E:

    2024年02月03日
    浏览(39)
  • java APP自动化测试AppIum

    一、前言 二、Appium环境搭建 2.1 JDK安装 2.2 Android SDK安装配置 2.3 模拟器安装及配置 2.4 Appium Desktop安装及使用 2.5 Appium配置连接模拟器 三、实战基本脚本编写 3.1 创建Maven项目并配置 3.2 简单Demo 四、写在最后   一、 前言 随着移动互联网的发展,APP上面的测试逐渐的流行起来。

    2024年02月05日
    浏览(49)
  • 【APP自动化测试必知必会】Appium之微信小程序自动化测试

    H5 是指第 5 代 HTML ,也指用 H5 语言制作的一切数字产品。 所谓 HTML 是“超文本标记语言”的英文缩写。我们上网所看到网页,多数都是由 HTML 写成的。 “超文本”是指页面内可以包含图片、链接,甚至音乐、程序等非文字元素。而“标记”指的是 这些超文本必须由包含属性

    2024年02月09日
    浏览(108)
  • 使用Appium2.0自动化规模测试APP

    最近做个项目需要测试服务端的并发性能,客户端采用安卓,接口数据采用Restul和流媒体播放。由于流媒体的接口并不清楚,所以决定采用安卓虚拟机来模拟。 正好赶上Appium2.0升级,网上的很多资料都不能用了,这里将整个环境搭建的要点记录下来与大家分享。 #1. Appium2.0的

    2024年02月08日
    浏览(50)
  • app自动化测试之Appium问题分析及定位

    使用 Appium 进行测试时,会产生大量日志,一旦运行过程中遇到报错,可以通过 Appium 服务端的日志以及客户端的日志分析排查问题。 Appium Server日志-开启服务 通过命令行的方式启动 Appium Server,下面来分析一下启动日志,日志第一行显示了 Appium 版本信息和服务在本地的运行

    2024年02月14日
    浏览(37)
  • APP自动化测试系列之Appium介绍及运行原理

    在面试APP自动化时,有的面试官可能会问Appium的运行原理,以下介绍Appium运行原理。 Appium是一个开源测试自动化框架,可用于原生,混合和移动Web应用程序测试。它使用WebDriver协议驱动IOS,Android和Windows应用程序。 Appium是开源的移动端自动化测试框架; Appium可以测试原生的

    2024年02月13日
    浏览(57)
  • APP自动化测试(2)-通过appium打开手机的应用

    目录 一、appium的Capabilities配置及Appium Inspector安装 1.1安装Appium Inspector 1.2Capabilities配置 二、获取手机以及app的信息 2.1获取连接设计的配置名称 2.1.1连接手机 2.1.2获取设备名称  2.2利用adb获取日志找到appPackage和appActivity   三、Start Session 3.1 安装appium-doctor 3.2解决appium-doctor查出

    2024年02月08日
    浏览(52)
  • 全网最细最全Appium自动化测试 iOS入门教程,App自动化测试教程,精细整理

    目录:导读 一、MAC电脑上 Appium 的安装流程 二、流程图 三、下载AppiumServerGui和AppiumInspector 四、开始测试       1、真机测试                 1.1 准备工作                 1.2 获取 开发包 .app 结尾                 1.3 WebDriverAgent使用                 1.4 配置 Appium Inspec

    2024年02月07日
    浏览(53)
  • appium+python自动化测试

    1、aapt即Android Asset Packaging Tool,在SDK的build-tools目录下。该工具可以查看apk包名和launcherActivity 2、在android-sdk里面双击SDK-manager,下载buidl-tools 3、勾选build-tools,随便选一个版本,我这里选的是24的版本 4、下载完成后:在D:androidsdkandroid-sdk-windowsbuild-tools24.0.0目录下找到aapt.e

    2024年02月10日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包