Top Banner
1 Testing Your Application on / for Google App Engine Narinder Kumar Inphina Technologies
23

Testing your application on Google App Engine

May 24, 2015

Download

Technology

Google App Engine has become a powerful PaaS provider in last couple of years. With Java support enabled, its scope has further increased. This session presents the options we have in terms of testing on Google App Engine. Following is an overview of the proposed agenda:

Running Test suites of Applications not built for Google App Engine
An over-view of Google Cloud Cover
Advantages & Limitations of Cloud Cover
Integration of Existing Test Suites in Google Cloud Cover
Local Testing of Applications built for Google App Engine
DataStore Testing
Memcache Testing
Task-Queue Testing
Authentication API Testing
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Testing your application on Google App Engine

1

Testing Your Application on / for Google App Engine

Narinder KumarInphina Technologies

Page 2: Testing your application on Google App Engine

2

Agenda

Problem Context App Engine Testing Framework

Local DataStore Testing

Authentication API Testing

Memcache Testing

Google Cloud Cover – An Overview

Page 3: Testing your application on Google App Engine

3

Easy to build, Easy to Maintain, Easy to Scale

Page 4: Testing your application on Google App Engine

4

Why Testing To verify correctness

of the code To be assured of

continued correctness of old code

To avoid surprises To safely make large

refactoringsI feel sad and naked without Good Test Coverage

Max Ross (Member of Google App Engine Team)

Page 5: Testing your application on Google App Engine

5

Do we need App Engine Specific Testing Strategies ?

Page 6: Testing your application on Google App Engine

6

Our Goal

To be able to test in our local environment using Spring Maven JPA/JDO JUnit Continuous Integration

Page 7: Testing your application on Google App Engine

7

Google Infrastructure Services

DataStore Memcache TaskQueue Authentication ...

Page 8: Testing your application on Google App Engine

8

App Engine Testing Framework

LocalServiceTestHelper LocalDataStoreServiceTestConfig

LocalMemCacheServiceTestConfig

LocalTaskQueueTestConfig

LocalUserServiceTestConfig

...

Page 9: Testing your application on Google App Engine

9

Local Data Store Testing

Page 10: Testing your application on Google App Engine

10

Step 1 : Make RunTime Libraries Available Locally

<dependency><groupid>com.google.appengine</groupid><artifactid>appengine-testing</artifactid><version>1.3.4</version><scope>test</scope>

</dependency><dependency>

<groupid>com.google.appengine</groupid><artifactid>appengine-api-labs</artifactid><version>1.3.4</version><scope>test</scope>

</dependency><dependency>

<groupid>com.google.appengine</groupid><artifactid>appengine-api-stubs</artifactid><version>1.3.4</version><scope>test</scope>

</dependency>

Some of these libraries are not available in Central Maven Repositories

Page 11: Testing your application on Google App Engine

11

Step 2 : Enhance Domain Classes<plugin>

<groupid>org.datanucleus</groupid><artifactid>maven-datanucleus-plugin</artifactid><version>1.1.4</version><configuration><mappingincludes>**/domain/*.class</mappingincludes>

<verbose>true</verbose><enhancername>ASM</enhancername><api>JPA</api>

</configuration><executions>

<execution><phase>compile</phase><goals>

<goal>enhance</goal></goals>

</execution></executions>

......<plugin>

Page 12: Testing your application on Google App Engine

12

Prepare Run-Time Environment and Dependencies

@RunWith(SpringJUnit4ClassRunner.class)@TestExecutionListeners( { DependencyInjectionTestExecutionListener.class })@ContextConfiguration(locations = { "classpath:test-applicationContext.xml", "classpath:test-applicationContext-dao.xml"})public class LocalDatastoreSpringTestCase extends TestCase {

private final LocalServiceTestHelper helper = new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig());

@Before public void setUp() { helper.setUp(); }

@After public void tearDown() { helper.tearDown(); }

Page 13: Testing your application on Google App Engine

13

Write Specific Tests

public class EmployeeDaoSpringTest extends LocalDatastoreSpringTestCase {

@Autowiredprivate EmployeeDao employeeDao;

@Testpublic void testShouldPersistEmployee() {

Employee employee = new Employee();employee.setFirstName("Scott");employee.setLastName("Adams");employee.setHireDate(new Date());

employeeDao.createEmployee(employee);

Collection<employee> list = employeeDao.list();

Assert.assertEquals(1, list.size());}

Page 14: Testing your application on Google App Engine

14

Authentication API Testingpublic class AuthenticationTest {

private final LocalServiceTestHelper helper = new LocalServiceTestHelper(new LocalUserServiceTestConfig()) .setEnvIsAdmin(true).setEnvIsLoggedIn(true);

@Test public void testIsAdmin() { UserService userService = UserServiceFactory.getUserService(); assertTrue(userService.isUserAdmin()); }

@Before public void setUp() { helper.setUp(); }

@After public void tearDown() { helper.tearDown(); }}

Page 15: Testing your application on Google App Engine

15

Memcache Testingpublic class LocalMemcacheTest {

private final LocalServiceTestHelper helper = new LocalServiceTestHelper(new LocalMemcacheServiceTestConfig());

@Test private void testInsert() { MemcacheService ms = MemcacheServiceFactory.getMemcacheService(); assertFalse(ms.contains("yar")); ms.put("yar", "foo"); assertTrue(ms.contains("yar")); }}

.... // SetUp and Tear Down

Page 16: Testing your application on Google App Engine

16

Google Cloud Cover – An Overview

Page 17: Testing your application on Google App Engine

17

Key Features

Provides ability to run your tests in Cloud Designed to run Existing Test Suites Tests Execute in Parallel

Creates one Task Queue per Test

Number of workers determined by Queue Config

Allows to Run Large Test Suites faster : Acts as a Test Grid

Page 18: Testing your application on Google App Engine

18

How to Set it up

Create a Standard GAE/J web application with all Production Code & Test Code and dependencies

Add Cloud Cover Dependencies to WAR Create a TestRunner Config around your Test

Suite Add Cloud Cover Servlet

http://<your_app_id>/cloudcover.html

Page 19: Testing your application on Google App Engine

19

Google Cloud Cover in Action

Page 20: Testing your application on Google App Engine

20

Different from Normal Testing

Each Test must complete in 30 seconds

Application Code and Test Code must obey

Sandbox restrictions

Need to invoke Tests via HTTP

Page 21: Testing your application on Google App Engine

21

Conclusions

Local RunTime Environment very helpful

during Development Phase

Google Cloud Cover can be a good aid in

certain areas but need more refinement

Page 22: Testing your application on Google App Engine

22

[email protected]

www.inphina.comhttp://thoughts.inphina.com

Page 23: Testing your application on Google App Engine

23

References http://code.google.com/appengine/docs/java/tools/localunittesting.html

http://code.google.com/p/cloudcover/

http://thoughts.inphina.com/2010/06/28/unit-testing-maven-based-jpa-application-on-gae/

http://objectuser.wordpress.com/category/software-development/google-app-engine/

http://code.google.com/events/io/2010/sessions.html#App%20Engine