1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/hagyao520-Appium

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Приветствуем вас в руководстве по Appium (системе автоматизации тестирования для Android)


Appium


Appium — это мобильный фреймворк автоматизации, который можно использовать для тестирования нативных приложений, мобильных веб-приложений и гибридных приложений. Он является многоплатформенным и может использоваться для iOS и Android, а также для Firefox OS.* Нативные приложения создаются с помощью SDK Android или iOS, такие как WeChat и QQ.

  • Мобильные веб-приложения представляют собой веб-приложения, такие как Safari и Chrome на устройствах iOS.
  • Гибридные приложения представляют собой приложения, которые используют WebView и взаимодействуют с ними, например WeChat Pay.
  • Самым важным является то, что Appium является многоплатформенным, то есть можно писать тестовые случаи с использованием одного набора API для различных платформ.

Введение в систему

Java + Appium + Maven + TestNG + JDBC + XML + Git + Ant + Jenkins
    * Используется Java как язык программирования проекта
    * Используется Appium как основной фреймворк для управления приложением
    * Используется Maven для управления зависимостями проекта
    * Используется TestNG для выполнения тестовых случаев и создания отчетов
    * Используется JDBC для работы с базами данных
    * Используется XML для управления тестовыми случаями
    * Используется Git для управления версионностью кода
    * Используется Ant для сборки проекта
    * Используется Jenkins для автоматической компиляции, сборки и запуска тестовых скриптов, а также отправки отчетов по электронной почте

Основные возможности

1. Реализовано вторичное упаковывание часто используемых методов, таких как Appium и WebDriver, включая перетаскивание, клики, ввод, локацию элементов, что делает использование более удобным.
2.Реализован быстрый вызов команд DOS, таких как `cmd`, `adb` и `terminal`, для Windows, Android и iOS.
 3. Реализован вызов функций клавиш клавиатуры для Windows, Android и iOS, позволяющий имитировать реальные действия пользователя на клавиатуре.
 4. Реализовано использование ASSERT в Appium для проверок, автоматическое создание скриншотов при провале тестовых проверок, что позволяет просматривать их в отчетах о тестировании; один провал проверки не влияет на выполнение последующих тестовых случаев.5. Реализован базовый парсер XML-файлов, который включает анализ элементов Unit, Case, Step и других, что соответствует шагам написания тестовых сценариев, делая процесс создания тестовых сценариев более простым.
  1. Реализованы SQL-операции для часто используемых баз данных (например, Oracle, MySQL), включающие операции Insert, Delete, Update, Query и выполнение хранимых процедур.

  2. Реализован механизм проверки данных в базах данных (Oracle, MySQL и т.д.), который включает получение значений полей базы данных, сохранение их в локальном кэше и последующее сравнение, требуя использование регулярных выражений.

  3. Реализован быстрый способ получения информации с экрана и сохранения её в локальном кэше, позволяющий использовать данные как параметры для тестовых сценариев, также требуя использование регулярных выражений.

  4. Реализованы запросы к API, включая методы POST и GET, которые могут быть вызваны непосредственно из тестовых сценариев, передавая соответствующие параметры.

  5. Реализовано улучшение внешнего вида отчетов о тестировании, создаваемых ExtentReports и TestNG, что делает их более эстетически приятными и удобными для чтения.---

Настройка окружения

  1. JDK версии 1.7 и выше (Ссылка)
  2. Eclipse/IntelliJ IDEA
  3. Android SDK (Ссылка)
  4. Selenium (Ссылка)
  5. Appium (Ссылка)
  6. Maven (Ссылка)
  7. Git (Ссылка)
  8. Ant (Ссылка)
  9. Jenkins (Ссылка)
  10. Одно реальное или виртуальное андроидное устройство, рекомендуются настоящие устройства (Ссылка)---

Внимание

  • Кодировка проекта должна быть установлена в UTF-8, чтобы избежать проблем с кракозярами

Создание тестового объекта класса, например [WeChatLogin.java]

package TestCases;

import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import AutomationTestSystem.Base.TestUnit;
import AutomationTestSystem.Service.RunUnitService;
import AutomationTestSystem.Service.AndroidXmlParseService;
---
### 2. Создание тестовых сценариев, таких как [WeChatLogin.xml]
```xml
<unit id="WeChatLogin" desc="Тестовые сценарии проверки процесса входа в систему WeChat">
    <case 
        id="case1"
        name="Проверка возможности нормального входа в приложение WeChat после первого запуска на устройстве с Android">
        <step action="wait-forced" value="5000" desc="Принудительное ожидание 5 секунд"/>
        <step action="android-click" locator="resource-id=com.tencent.mm:id/ca4" desc="Нажатие кнопки входа"/>
        <step action="android-check" locator="resource-id=com.tencent.mm:id/a_m" expect="вход" message="Не удалось войти в приложение (активный результат отличается от ожидаемого)" caseid="Case1" desc="Проверка возможности нормального входа в приложение WeChat после нажатия кнопки входа"/>
    </case>
    <case 
        id="case2"
        name="Проверка успешного входа в систему при правильном вводе номера телефона и пароля">
        <step action="android-input" locator="text=Ваш номер телефона" value="XXX" desc="Ввод правильного номера телефона"/>
        <step action="android-input" locator="resource-id=com.tencent."/>
</unit>
public class WeChatLogin {
    private static RunUnitService runService;
```    @BeforeTest
    private void setUp() throws Exception {
        TestUnit testunit = AndroidXmlParseService.parse("WeChat.apk", "com.tencent.mm", "Android", "8.0", "55CDU16726008808", "WeChatLogin.xml");
        runService = new RunUnitService(testunit);
        System.out.println("--------------------------【Тестовые сценарии проверки процесса входа в систему WeChat】--------------------------");
    }

    @Test
    public void case1() throws Exception {
        runService.runCase("case1");
        runService.TestReportRemarks("Проверка возможности нормального входа в приложение WeChat после первого запуска на устройстве с операционной системой Android.");
    }

    @Test
    public void case2() throws Exception {
        runService.runCase("case2");
        runService.TestReportRemarks("Проверка успешного входа в систему при корректном введении номера телефона и пароля.");
    }```markdown
<mm:id/g_" value="XXX" desc="Введите правильный пароль"/>
<step action="android-click" locator="text=登录" desc="Нажмите кнопку входа"/>
<step action="android-check" locator="text=通讯录" expect="通讯录" message="Не удалось войти (активный результат отличается от ожидаемого)"
caseid="Case3" desc="Проверьте, что после ввода правильного номера телефона и пароля, нажатия кнопки входа, вы успешно вошли и перешли на главный экран приложения"/>
</case>
</unit>
Приведенный выше пример представляет собой единичный тестовый случай; используйте свои реальные учетные данные для имени пользователя и пароля. Это довольно просто и схоже с написанием тестовых случаев.
<unit> до </unit> содержат коллекцию тестовых скриптов, аналогично коллекции тестовых случаев, используется вместе с тестовым классом (WeChatLogin.java)
<case> до </case> содержат единичный тестовый скрипт, аналогично единичному тестовому случаю, id соответствует порядковому номеру тестового случая, name соответствует заголовку тестового случая, обратите внимание, что здесь id должны совпадать с теми, которые указаны в тестовом классе (WeChatLogin.java)
```<step> до </step> содержат шаги выполнения тестового скрипта, аналогично шагам выполнения тестового случая, action=операция, которую следует выполнить, locator=координаты элемента, value=необходимый параметр, desc=описание шага, которое будет выводиться в консоли, expect=ожидаемый результат, message=сообщение об ошибке при провале теста, будет показываться в отчете по тестированию, caseid=название скриншота при провале теста, обычно совпадает с Caseid, указывает, что это скриншот данного тестового случая
---
### Три. Конфигурация службы Appium
public static void AppiumConfigure(String ApkName, String ApkPackageName, String PlatformName, String PlatformVersion, String DeviceID) throws Exception {
Runtime.getRuntime().exec("adb -s " + DeviceID + " uninstall " + ApkPackageName + "); 
//Укажите путь установки APK:
File apk = new File(ConfigUtil.getProperty("apk.path", Constants.CONFIG_COMMON), ApkName);
//Задайте параметры автоматизации:
DesiredCapabilities capabilities = new DesiredCapabilities();
//Установите Appium движок тестирования:
capabilities.setCapability("device", "uiautomator2");
//Укажите систему устройства и версию системы:
capabilities.setCapability("platformName", PlatformName);
capabilities.setCapability("platformVersion", PlatformVersion);
//Текущий подключенный телефон, по умолчанию распознается один
//capabilities.setCapability("deviceName", "Android Emulator");
    //Укажите имя тестового устройства и его ID:
    capabilities.setCapability("deviceName", DeviceID);
    capabilities.setCapability("udid", DeviceID);
    //Xiaomi 5S (черный - USB соединение)
    //capabilities.setCapability("deviceName", "29739ff4");
    //capabilities.setCapability("udid", "29739ff4");
          //capabilities. setCapability("deviceName", ConfigUtil.getProperty("MI_5S_golden.WIFI", Constants.CONFIG_COMMON));
          //capabilities. setCapability("udid", ConfigUtil.getProperty("MI_5S_golden.WIFI", Constants.CONFIG_COMMON));
           //Инициализация кэша приложения, false (инициализировать) / true (не инициализировать)
          capabilities.setCapability("noReset", true);
           //Переустановка приложения, true (переустановить) / false (не переустанавливать)
          capabilities.setCapability("fullReset", false);
           //При запуске заменяет ли сессия, true (заменять) / false (не заменять)
          capabilities.setCapability("sessionOverride", false);
           //Активация ввода на китайском языке, установка Unicode клавиатуры, true (установить) / false (не устанавливать)
          capabilities.setCapability("unicodeKeyboard", true);
           //Восстановление системы по умолчанию, true (восстановить) / false (не восстанавливать)
          capabilities.setCapability("resetKeyboard", true);
           //Задание времени ожидания команд Appium:
          capabilities.setCapability("newCommandTimeout", 60000);
           //Подпись APK, false (подписать) / true (не подписывать)
          capabilities.setCapability("noSign", true);
           //Запуск приложения после установки
          capabilities.setCapability("app", apk.getAbsolutePath());
           //Переход в Webview
          //capabilities.setCapability("autoWebview", true);
           //Инициализация AndroidDriver
          driver = new AndroidDriver<WebElement>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
           //Запуск службы Appium
          //node C:\Users\King-liu\AppData\Local\Programs\Appium\resources\app\node_modules\appium\build\lib\main.js --address 127.0.0.1 --port 4723
           //Задание глобального времени ожидания
          driver.manage().timeouts()```markdown
implicitlyWait(80000, TimeUnit.MILLISECONDS);
}
- При выполнении теста необходимо указать DeviceName, PlatformName, PlatformVersion и другие данные, DeviceName можно получить через команду `adb devices`
---
### Четвертый раздел. Выполнение тестовых случаев
- После написания соответствующего тестового класса `[WeChatLogin.java]` и тестового скрипта `[WeChatLogin.xml]`, в IDE выберите файл `WeChatLogin.java`, щелкните правой кнопкой мыши и запустите его с помощью TestNG.
![Скриншот](https://images.gitee.com/uploads/images/2019/0923/113030_e80cf4e3_1325509.png)
---
### 5. Тестовый отчёт
- Тестовый отчёт делится на два типа: первый — это встроенный тестовый отчёт TestNG, второй — отчёт, созданный с помощью вызова ExtentReports. Второй тип более эстетичен.
### [TestngReport](https://static.oschina.net/uploads/space/2018/0508/141415_q7hQ_3854545.png)
```xml
<?xml version="1.0" encoding="UTF-8"?>
<suite name="Appium тестовый отчёт" parallel="false" configfailurepolicy="continue">
    <test name="Процесс входа в WeChat" junit="false" verbose="3" parallel="false" thread-count="5" annotations="javadoc" time-out="60000" enabled="true" skipfailedinvocationcounts="true" preserve-order="true" allow-return-values="true">
        <classes>
            <class name="TestCases.WeChatLogin">
                <methods>
                    <include name="case1" />
                    <include name="case2" />
                    <exclude name="" />
                </methods>
            </class>
        </classes>
    </test>
------------------------------------------------------------------------------------------------------
<!-- Вызванные слушатели -->
    <listeners>
        <listener class-name="org.uncommons.reportng.HTMLReporter" />
        <listener class-name="org.uncommons.reportng.JUnitXMLReporter" />
    </listeners>
</suite>

Скриншот

ExtentReports

<?xml version="1.0" encoding="UTF-8"?>
     <suite-files>
         <suite-file path="TestngReport.xml"></suite-file>
     </suite-files>
     <listeners>
         <listener class-name="com.jmoney.jiumiaodai.service.ExtentReportGenerateService"></listener>
     </listeners>
     <!-- C:\Windows\System32\drivers\etc
     151.139.237.11 cdn.rawgit.com -->
</suite>

  • Второй тип тестового отчета требует использования прокси для корректного отображения; иначе страница будет содержать неразборчивый текст, так как это иностранное программное обеспечение. Либо добавьте в конец файла hosts следующую строку: 151.139.237.11 cdn.rawgit.com

Шесть. Jenkins для непрерывной интеграции:

  • Установите среду Jenkins, подробнее см.: https://blog.csdn.net/wuxuehong0306/article/details/50016547
  • Настройте проект автоматизации непрерывной интеграции Jenkins, чтобы обеспечить автоматическое выполнение скриптов на удаленном сервере (конфигурация, сборка, пакетирование), отправку электронных сообщений с отчетами о тестировании и т. д.

Семь. Благодарность

Если вы считаете этот фреймворк полезным, вы можете сделать пожертвование, что позволит мне продолжать работу. Большое спасибо!

![](https://testerhome.com/uploads/photo/2018/26d494a6-7b4f-4b69-8db1-0a3b45f886b7.png! large)

**Большое спасибо за то, что вы уделили время чтению этого материала.**Желаю вам приятного времяпровождения здесь, регистрируясь, читающему и делитесь своими знаниями!
Приглашаю вас оставлять свои отзывы и вопросы, а также обращаться ко мне или присоединяться к группе для обсуждения.

Автор: @Лiu Zhi King
QQ: 1306086303
Email: hagyao520@163.com

Официальная группа QQ 126325132
Группа для обсуждения программного тестирования и разработки

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/hagyao520-Appium.git
git@api.gitlife.ru:oschina-mirror/hagyao520-Appium.git
oschina-mirror
hagyao520-Appium
hagyao520-Appium
master