Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to set up a Appium UI test maven project to work with Gitlab CI to test Android App?

I am an intern now, new to automation test.My goal here is to help my company set up CI for client side.

Right now I have a maven project contains several tests using Appium java-client lib, under Eclipse IDE, which could run the UI tests locally. My goal next step is to hook my tests with the gitlab repo(which is already there, created by the android developers), but I am stuck here. Could somebody help me out? Please try to be specific:

  1. how should I set up the .gitlab.yaml?
    • can we just have the script in yaml to download Appium and maven?
    • or we could just download Appium, but import all the Appium java-client jars to libs in main?
  2. If either of above is true, how? if neither, what and how should I do?
  3. Where should I put my test in gitlab in that repo? Or I don't have to put my tests in the existing repo. Instead, I could have another one and tell yaml where to reach? Again, how?
  4. It will be helpful if you could help me go through the workflow. Like, when I developers check in code, gitlab read the yaml, then build, then find my test suits in where(Q3), then execute etc.

Many thanks in advance!

like image 940
black zeng Avatar asked Jun 16 '17 03:06

black zeng


Video Answer


1 Answers

Since finally someone is also interested in this question, let me share my solution to this.

So, if you are looking at this question, I assume you already have your test suite and you could test it locally in your machine, either have your app installed in a simulator or a real device. Now you need to read more about gitlab pipeline and gitlab CI :

  • pipeline: https://docs.gitlab.com/ee/ci/pipelines.html

  • gitlab CI: https://docs.gitlab.com/ee/ci/quick_start/

And you should have noticed that, one of the advantages of Appium is that you don't need to change a thing about the App you are testing, you are testing exactly the same App which is going into production. To learn more about Apppium:

  • http://appium.io/docs/en/about-appium/intro/

Now, to run the automation test, you need your test suite, the app, and Appium server. What we need to do is adding another stage in .gitlab-ci.yml, tell it to

  • take the newly compiled App, compile your test suite

  • install the App in simulator/real device

  • compile your test suite and run it.

To make things easier to understand, we start with question 4, workflow:

So when the code is checked in to gitlab, the gitlab runner runs the jobs of each stage in your .gitlab-ci.yml, and when it runs to your stage, it does the automation test, and note that it is running on your server, so it means you need to have Appium installed on your server and have it up and running when try to run your automation test suite. Now the problem is that, is your server capable to do so? If you wanna do the automation test in your server, you need to install Appium on it, simulator probably(and which might need your server to equip with GPU), etc, these are the concerns of maintaining server. The alternative would be using the third-party service ,which is what I did. Turns out our(when I was in that company) server isn't capable of running automation UI test, so we turned to AWS-ADF(Amazon Device Farm), there are many other service providers you could choose, see the link for references:

https://adtmag.com/blogs/dev-watch/2017/05/device-clouds.aspx

So I basically have a python script in my functional test stage, and it will grab the newly complied App, the automation test suite, upload them to AWS ADF, and then schedule a run, yields result when the run is finished.

so, to answer question 1:

  • we need to create one more stage for our functional test in .gitlab.yaml, in my case, I have a stage functionalTest_project stage after the stage which compiles the Android App. And then you script the necessary cmd in your stage, or if its too lengthy, your script in another file(put it in your repo) and then execute it. In my case, I put my script in python_ci.py, and then I execute it in my stage use “python python_ci.py” .(here you need a docker with these requirement, see below too)

  • You don’t download Appium, you set up Appium on your or if you use a cloud service, that service should set up Appium for you.

  • What I did it is that I use maven built and package the test suite locally and then push it to gitlab repo, which now I believe the better way would be compile and package it in the your functionalTest stage in .gitlab.yml. now it comes back to first point of question 1, how to get maven, my understanding is that its a dependency of the server, like python, so they could both be obtained by telling gitlab to execute your script with a docker that has python and maven dependency.

answer to question 3:

  • put it in the same repo, but out of the Android project(i.e. they will under the same directory).

  • how to tell yml to reach the test suite? remember they are in the same server, so you could the relative path in your yml script to tell yml where to get your test suite.

Hope this helps!

like image 89
black zeng Avatar answered Oct 06 '22 00:10

black zeng