微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否可以将空手道与 AWS 设备场一起用于 Android 和 iOS 测试?

如何解决是否可以将空手道与 AWS 设备场一起用于 Android 和 iOS 测试?

我想知道是否可以将空手道与 AWS 设备群一起用于 Android 和 iOS 测试。如果可能,是否有任何配置示例?

我能找到的唯一与空手道和 AWS 设备农场相关的内容this repository,但它与 Web 应用程序测试有关。

谢谢

解决方法

是的,AWS Device Farm 确实支持在 Android 和 iOS 设备上执行用于 Web 测试的 Karate 框架。 AWS Device Farm 上的桌面和移动测试之间的主要区别在于,对于移动测试,我们要求将测试打包并上传到我们的服务以供服务器端执行。例如,在下面的代码中,我们使用一个简单的条件分支来检查“我们是为移动设备运行服务器端还是为桌面浏览器设备运行客户端”:

class DeviceFarmWebTests(unittest.TestCase):

    def setUp(self):
        if os.getenv("DEVICEFARM_DEVICE_NAME"):
            print("Running my test on a real physical device in Device Farm (server-side)")
            url = "http://127.0.0.1:4723/wd/hub"
            desired_capabilities = {}

        else:
            print("Running my test on a desktop browser in Device Farm (client-side)")
            session = boto3.Session(profile_name='simsjon')
            devicefarm = session.client('devicefarm',region_name='us-west-2')
            project_arn = create_project(devicefarm,"Test Desktop Browsers Project") 
            print("Project ARN:",project_arn)
            url = create_presigned_url(devicefarm,arn=project_arn) 
            print("Creating a new remote web driver session at:",url)
            desired_capabilities = DesiredCapabilities.CHROME

        self.driver = webdriver.Remote(command_executor=url,desired_capabilities=desired_capabilities) 
        print("A new WebDriver session has been created. SessionId:",self.driver.session_id)

    def test_main(self):
        ...

有关打包和上传此类测试的说明,请参阅此处的说明,这些测试将通过 Appium 服务器与 AWS Device Farm 移动设备通信(因此称为 Appium 测试):https://docs.aws.amazon.com/devicefarm/latest/developerguide/test-types-appium.html

,

直接在 aws 设备群中运行:

根据以下文档修改您现有的空手道项目: https://docs.aws.amazon.com/devicefarm/latest/developerguide/test-types-appium.html

步骤非常简单,更新pom.xml,创建assembly/zip.xml,然后运行mvn package来创建您必须zip并上传到devicefarm 项目。

我注意到通过直接上传您的项目在设备场上运行仅适用于 Junit4,因此您只能在您的依赖项中使用 karate-junit4

对于本地:

参考 https://github.com/ptrthomas/karate-devicefarm-demo 中的 DeviceFarmTarget 课程并在您现有的空手道项目中实现类似的课程

public class AwsDeviceFarmMobileTarget implements Target {

    private String arn;
    private String driverType = "android";

    public AwsDeviceFarmMobileTarget(Map<String,Object> options) {
        arn = (String) options.get("arn");
        if (arn == null) {
            throw new RuntimeException("arn is null");
        }
        // update driver type and browserName if needed
    }

    @Override
    public Map<String,Object> start(ScenarioRuntime sr) {
        sr.logger.info("starting driver using: {}",AwsDeviceFarmMobileTarget.class);
        DeviceFarmClient client = DeviceFarmClient.builder().region(Region.US_WEST_2).build();
        CreateTestGridUrlRequest request = CreateTestGridUrlRequest.builder()
                .expiresInSeconds(300)
                .projectArn(arn)
                .build();
        CreateTestGridUrlResponse response = client.createTestGridUrl(request);
        String webDriverUrl = response.url();
        sr.logger.info("aws url provisioned: {}",webDriverUrl);
        Map<String,Object> map = new HashMap();
        map.put("type",driverType);
        map.put("start",false);
        map.put("webDriverUrl",webDriverUrl);
        // this is needed because it can take a minute or two for the "desktop" to be provisioned by aws
        map.put("httpConfig",Collections.singletonMap("readTimeout",120000));
        // refer: https://docs.aws.amazon.com/devicefarm/latest/testgrid/techref-support.html
        Map<String,Object> session = new HashMap();
        map.put("webDriverSession",session);
        Map<String,Object> capabilities = new HashMap();
        session.put("capabilities",capabilities);
        // for some reason,both are needed for aws device farm
        session.put("desiredCapabilities",capabilities);
        return map;
    }

    @Override
    public Map<String,Object> stop(ScenarioRuntime sr) {
        return Collections.EMPTY_MAP;
    }


}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。