`

TestNG 自动化开发

阅读更多
运行自动化测试,借助TestNG,

在build.xml 里定制 test 任务:

<!--parameter xml file -->
<import file="build_test_targets.xml"/>

<!-- testng task define -->
<testng haltonfailure="true" failureproperty="test.failed"
configFailurePolicy="skip" timeout="${test.timeout}" outputdir="build/brazil-unit-tests"
haltonskipped="false">
<env key="CORAL_CONFIG_PATH" value="${bp:run.coralconfig}" />
<classpath>
<pathelement path="${classes.dir}" />
<pathelement path="${testclasses.dir}" />
<pathelement path="${bp:run.classpath}" />
<pathelement path="${bp:testrun.classpath}" />
</classpath>
<xmlfileset dir="${testclasses.dir}" includes="${test.testngxmlfile}" />
<!-- <jvmarg value="-Dlog4jConfig=${basedir}/configuration/log4j.conf"></jvmarg> -->
<jvmarg value="-DtestEnvironmentFile=${testEnvironmentFile}"></jvmarg>
<jvmarg value="-Dg2s2version=${g2s2version}"></jvmarg>
<jvmarg value="-DbrowserName=${browserName}"></jvmarg>
<jvmarg value="-Ddevice-type=${device-type}"></jvmarg>
<jvmarg value="-DappActivity=${appActivity}"></jvmarg>
<jvmarg value="-DappPackage=${appPackage}"></jvmarg>
<jvmarg value="-Dapp-wait-activity=${app-wait-activity}"></jvmarg>
<jvmarg value="-Ddevice=${device}"></jvmarg>
<jvmarg value="-DdeviceName=${deviceName}"></jvmarg>
<jvmarg value="-DplatformName=${platformName}"></jvmarg>
<jvmarg value="-Dendpoint=${endpoint}"></jvmarg>
<jvmarg value="-DjobType=${jobType}"></jvmarg>
<jvmarg value="-DplatformName=${platformName}"></jvmarg>
<!-- <jvmarg value="-DtestDetailsFile=${testDetailsFile}"></jvmarg> -->
<jvmarg value="-DautomationName=${automationName}"></jvmarg>
<jvmarg value="-DnewCommandTimeout=${newCommandTimeout}"></jvmarg>
<jvmarg value="-Ddevice=${device}"></jvmarg>
</testng>

在另外一个xml(build_test_targets.xml) 文件里填写 被测的类 和测试的参数,这个文件之前被import 进build.xml 里。 用import 方法可以像套娃一样,随意嵌套,灵活定制参数

<project name="xxx_project" basedir=".">

<target name="run-xxx-TEST-iosBrowser">
<antcall target="run-test-common-iosBrowser">
<param name="test.testngxmlfile" value="xxx_TestSuite_IOSBrowser_config.xml" />
<param name="test.timeout" value="1800000" />
</antcall>
</target>

真正运行selenium 测试的testng 传入函数的参数,放在 xxx_TestSuite_IOSBrowser_config.xml 里, 这个是你自动化框架定义的

<?xml version="1.0" encoding="UTF-8"?>
<suite name="Detail_IOS_Safari" thread-count="1" parallel="methods"
verbose="2" preserve-order="true">
<parameter name="locale" value="CN" /><!-- UK/DE/US -->
<parameter name="stage" value="Prod" /><!-- BETA/GAMMA/PROD -->
<parameter name="driver_server_name" value="none" />
<parameter name="driver_server_port" value="0" />
<parameter name="test_url" value="https://cntech-web-preflight-cn.com/gp/homepage.html"></parameter>
<parameter name="test_browser" value="safari_ios"></parameter>
<parameter name="test_retires" value="3"></parameter>
<parameter name="test_weblabs" value="GLOBAL_STORE_FLAG_40127:T1|GLOBAL_STORE_39815:T1|PHASE2_51123:C|57927:C"></parameter>

<parameter name="test_screenshotflag" value="failure"></parameter>
<parameter name="test_page_timeout_inseconds" value="200"></parameter>
<parameter name="test_element_timeout_inseconds" value="10"></parameter>
<parameter name="report_from" value="cntech-ags-testing@amazon.com"></parameter>
<parameter name="report_summary_to" value=""></parameter>
<parameter name="report_detail_to" value=""></parameter>
<parameter name="report_screenshot_to" value=""></parameter>
<parameter name="only_send_failed_report" value="true"></parameter>
<parameter name="report_tim_hashcode" value=""></parameter>
<parameter name="report_pipeline_name" value="xxx-horizonte-prod"></parameter>
<parameter name="upload_to_analyse" value="true"></parameter>

<test name="Detail page of an ASIN">
     <groups>
            <run>
                <include name="mobile" />
            </run>
        </groups>
<classes>
<class name="test.desktop.detailpage.DetailPageTest" />
</classes>
</test>

</suite>

你的框架就是把你的参数传进你的函数里,你的函数要处理这些参数,然后产生相应的assert ion 判断

//需要下载 jcommander.jar, 否则就会报错: 参考:http://www.jcommander.org/#Download
testng-execution:
   [testng] java.lang.NoClassDefFoundError: com/beust/jcommander/ParameterException

// testng tag
need add class path into testng tag, otherwise, will report error cannot find test class **Test

//得要学会如何在 ant 中 debug ,不然有你苦头吃的

You can do this in Eclipse with these steps:

    Be sure to open your build file in the ANT editor (right click on build file -> Open with -> Ant editor).
    Double click in the left margin of your build file where you want breakpoint.
    Open the Ant view (Window -> Show view -> Ant).
    If the build file isn't in the view then you can simply add it.
    Once added right click on the ant target you want to run and select Debug as -> Ant build
    The Debug perspective should open up and the process should stop at your breakpoint where you can step through it
    Sometimes it is required to set the arguments at the time of debugging. It can be set by selecting: Debug as -> Ant build. And then need to select Arguments. And then values can be entered as: -Dprop.name=property value


//之前遇到 “TestNG [Error] Cannot instantiate class xxxTest”
原因是我把 src 和 tst 下的类分别编译到两个目录下,如下:
<javac srcdir="${src}" destdir="${src.classes.path}"
<javac srcdir="${tst}" destdir="${tst.classes.path}"
都编译到一个目录下,就没有问题了,也就是把上面两个 destdir 合成一个


// 遇到错误 [testng] Configuration Failures: 1, Skips: 2
一直找不到原因,后来网上找到高人指点,去看 test-output 里的test report, 一看,果然发现exception log

// 用TestNg @Parameter 传参数传不进去,后来发现是函数没有把传进来的参数存为 内部变量

// Jenkins 设置, 需要增加 JDK 时怎么办?
在 Global Tool Configuration 里可以增加 JDK ,参考: http://blog.csdn.net/anning_88/article/details/50635940
我采取了另外一种方法,在shell 里增加环境变量的设置

// 用 ant -f build.xml 运行testng 测试脚本, 遇到问题,莫名其妙的取不到参数,后来,log只提示发现一个testclass 的error, 而编译过程中该类没有问题,虽然调用testng 参数,但是没有用,在其他类中也没有依赖, 但是testng 把调用它的类无法争取传递参数认为是失败的。后来把这个类删掉,测试运行正常了

// 测试代码中要把无用的import 都去掉,否则testng 也会检测import 的类是否存在或 是否争取的传递testng 参数,否则测试失败

// 如果打开太多的窗口,一次删掉进程用  TaskKill
taskkill /IM chrome.exe /F 强制删除

// xpath 定位如果很多行文字,怎么直接定位到文字相关控件
用text() 获得文字,但有时text()不好使, 就用., 比如 //span[contains(.,'资讯管理')],参考http://www.cnblogs.com/sschen/p/3612503.html

// 出错
org.openqa.selenium.StaleElementReferenceException: stale element reference: element is not attached to the page document
这个主要是element 过期,重新定位一下。我处理是增加一个waitFroElementPresent函数
driver.waitForElement(Xpath_ServiceRequest_Wizard1_NextStep_ButtonGroup, 5000);

//出错 /org.openqa.selenium.NoAlertPresentException: no alert open
need Add wait like below:
try {
    WebDriverWait wait = new WebDriverWait(driver, 2);
    wait.until(ExpectedConditions.alertIsPresent());
    Alert alert = driver.switchTo().alert();
    System.out.println(alert.getText());
    alert.accept();
    Assert.assertTrue(alert.getText().contains("Thanks."));
} catch (Exception e) {
    //exception handling
}

// 如何快速测试一个API函数
有时候 JAVA API 文档说的不是很清楚,想要快速写个API函数,试验一下,怎么办?就是拷贝该函数,到某个目录下, eclipse 就会快速给你用该函数建一个Snippet APPLICATION  ,这样就方便测试了
分享到:
评论

相关推荐

    java+selenium+maven+testng自动化测试框架实例(实际项目)

    Java+Selenium+Maven+TestNG自动化测试框架是现代软件开发中的一个重要组成部分,尤其是在Web应用程序的质量保证阶段。这个实例项目展示了如何将这四个强大的工具集成为一套完整的自动化测试解决方案。 **Java**: ...

    Appium+TestNG自动化测试

    首先,要进行Appium+TestNG自动化测试,你需要确保你的开发环境已经准备就绪。这包括安装Java Development Kit (JDK)、Android SDK、Appium服务器、Android模拟器或物理设备、以及TestNG库。对于物理设备测试,还...

    Selenium+TestNG自动化测试

    【Selenium+TestNG自动化测试】是现代软件开发中一种高效的质量保证手段,尤其在云计算领域,如阿里云,自动化测试能显著提升测试效率和软件稳定性。自动化测试通过编写可执行的测试脚本来模拟用户行为,对软件进行...

    Testng自动化测试框架实战详解,全网最新最全Testng自动化测试框架技术

    ### TestNG自动化测试框架实战详解 #### 一、TestNG简介 TestNG 是一个功能强大的自动化测试框架,它汲取了 JUnit 和 NUnit 的优点,并在此基础上进行了创新和发展。相较于 JUnit,TestNG 提供了更加灵活和强大的...

    TestNG接口自动化测试步骤.pptx

    TestNG是一款强大的自动化测试框架,尤其适用于接口自动化测试。它提供了丰富的注解、灵活的测试配置和报告功能,使得测试工作更加高效。以下是对TestNG接口自动化测试的详细步骤的阐述: 1. **环境准备**:首先,...

    集成Jenkins和TestNG实现自助式自动化测试平台

    Jenkins和TestNG搭建一个自助式的自动化测试平台。在软件业十分成熟的今天,敏捷(Agile)开发在业界日益流行,而面临的挑战也日益增多,不断变化的用户需求、缩短的开发周期、频繁的部署上线、复杂的产品架构和团队...

    全栈自动化测试实战 基于testng,httpclient,selenium.appium

    全栈自动化测试实战,是现代软件开发中一个关键的环节,尤其在追求高效、稳定和质量的项目中显得尤为重要。本书以testng、httpclient和selenium.appium为技术核心,详细介绍了如何进行端到端的自动化测试。下面将...

    Dagger-TestNG自动化测试工程包

    **Dagger-TestNG自动化测试工程包**是一个集成了Dagger依赖注入框架和TestNG测试框架的项目,专为执行Selenium自动化测试而设计。这个工程包简化了测试类的编写,提供了对多种浏览器的支持,使得测试代码更加简洁、...

    java+selenium+testng参数化打开百度搜索

    Java+Selenium+TestNG 参数化打开百度搜索 在自动化测试中,使用 Java+Selenium+TestNG 框架可以实现参数化打开百度搜索的功能。...* Java 是一种广泛使用的编程语言,经常用于自动化测试和软件开发。

    云端自动化测试工具TestNG等

    自动化测试工具:在本文中,作者提到的自动化测试工具包括TestNG、JMeter和Jenkins。TestNG是一种Java框架,用于简化单元测试、集成测试和功能测试。JMeter是一个开源的性能测试工具,可以用来模拟对服务器或网络...

    基于java+testng+数据库的接口自动化测试.zip

    在接口自动化测试领域,Java、TestNG和数据库的结合是一个常用且强大的组合。这个压缩包“基于java+testng+数据库的接口自动化测试.zip”很可能包含了一套完整的接口自动化测试框架,用于验证后端服务的功能性和数据...

    集成 Jenkins 和 TestNG 实现自助式自动化测试平台

    ### 集成 Jenkins 和 TestNG 实现自助式自动化测试平台 #### 背景介绍 随着敏捷开发方法论在软件行业的广泛应用,软件项目的开发周期不断缩短,部署频率显著增加,这给软件质量保证带来了新的挑战。特别是对于大型...

    Selenium+TestNG 框架的WEB自动化源码

    Selenium和TestNG是两种广泛应用于Web自动化测试的开源工具,它们在软件开发流程中扮演着重要的角色。Selenium是一个强大的浏览器自动化框架,支持多种编程语言,如Java、Python、C#等,允许开发者编写脚本来模拟...

    JAVA接口自动化测试MyBatis+MySQL实现用例管理

    在Java开发过程中,接口自动化测试是一项至关重要的任务,它能够有效地确保代码质量,减少手动测试的工作量,并在软件迭代过程中快速验证功能的正确性。MyBatis作为一个轻量级的持久层框架,与MySQL数据库结合,可以...

    自动化测试框架,支持接口自动化、WEB UI自动化、APP UI自动化

    【标题】中的“自动化测试框架,支持接口自动化、WEB UI自动化、APP UI自动化”涉及到的是软件测试领域的一个重要话题。这个框架集成了多种自动化测试的能力,涵盖了从后端API到前端UI的全方位测试。 首先,接口...

    全网最全Selenium3+Java+Maven+TestNG+ReportNG+SVN+Jenkins自动化测试环境搭建

    ### Selenium3+Java+Maven+TestNG+ReportNG+SVN+Jenkins自动化测试环境搭建 #### Java环境搭建 **一、安装JDK1.8** - **步骤**: 下载JDK安装包并按照向导指引进行安装,直至安装完成。 **二、配置JDK环境变量** ...

    基于Springboot+Mybatis打造接口自动化测试框架-全网最新最全最具技术含量的接口自动化测试及框架编写

    4. **自动化测试框架**:为了实现自动化测试,我们需要一个测试框架,如JUnit或TestNG。它们提供了一种组织和执行测试用例的方式。在接口测试中,我们可以利用Mockito来模拟依赖,避免真实调用其他服务,保持测试的...

    最全面的Java接口自动化测试实战.docx

    同时,选择合适的自动化测试框架如TestNG,可以提升测试效率,支持并行测试,提供丰富的断言和报告功能。 TestNG是一个强大的测试框架,支持多种测试类型,如单元测试、集成测试和端到端测试。它提供了灵活的注解、...

    selenium3+java+Maven+TestNG+ReportNG+Excel自动化参数测试框架源码

    2. **Java**:作为后端开发和自动化测试的主流语言,Java以其稳定性和跨平台特性被选择为该框架的编程语言。它提供丰富的库和API,方便编写和维护测试脚本。 3. **Maven**:Maven是Java项目管理工具,用于构建、...

Global site tag (gtag.js) - Google Analytics