Appium — это мобильный фреймворк автоматизации, который можно использовать для тестирования нативных приложений, мобильных веб-приложений и гибридных приложений. Он является многоплатформенным и может использоваться для iOS и Android, а также для Firefox OS.* Нативные приложения создаются с помощью SDK Android или iOS, такие как WeChat и QQ.
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 и других, что соответствует шагам написания тестовых сценариев, делая процесс создания тестовых сценариев более простым.
Реализованы SQL-операции для часто используемых баз данных (например, Oracle, MySQL), включающие операции Insert, Delete, Update, Query и выполнение хранимых процедур.
Реализован механизм проверки данных в базах данных (Oracle, MySQL и т.д.), который включает получение значений полей базы данных, сохранение их в локальном кэше и последующее сравнение, требуя использование регулярных выражений.
Реализован быстрый способ получения информации с экрана и сохранения её в локальном кэше, позволяющий использовать данные как параметры для тестовых сценариев, также требуя использование регулярных выражений.
Реализованы запросы к API, включая методы POST и GET, которые могут быть вызваны непосредственно из тестовых сценариев, передавая соответствующие параметры.
Реализовано улучшение внешнего вида отчетов о тестировании, создаваемых ExtentReports и TestNG, что делает их более эстетически приятными и удобными для чтения.---
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.

---
### 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>
<?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>

**Большое спасибо за то, что вы уделили время чтению этого материала.**Желаю вам приятного времяпровождения здесь, регистрируясь, читающему и делитесь своими знаниями!
Приглашаю вас оставлять свои отзывы и вопросы, а также обращаться ко мне или присоединяться к группе для обсуждения.
Автор: @Лiu Zhi King
QQ: 1306086303
Email: hagyao520@163.com
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )