RunTest with Salesforce Tooling REST API (同步与异步)

Salesforce支持通过Tooling REST API执行测试代码,分为runTestsAsynchronous(异步执行)及runTestsSynchronous(同步执行)两种方式。
参考: https://developer.salesforce.com/docs/atlas.en-us.api_tooling.meta/api_tooling/intro_rest_overview.htm

本篇我将为你展示runTestsAsynchronous(异步执行)与runTestsSynchronous(同步执行)两者的区别。

准备工作

1.Salesforce账号
2.apigee for Salesforce (https://apigee.com/console/salesforce)
3.一个TestClass (Id=01p10000001Faws) 如:

1.runTestsAsynchronous

异步执行测试任务将允许方法以并行的方式执行,缩短你的测试代码执行时间。
(事实上,这种方式在后台队列拥挤时会非常慢,甚至会超过10分钟才会响应 :()

首先,通过apigee进行Salesforce OAuth2认证。
apigee apigee-auth2 REST API V28.0以后的版本开始支持Tooling API,因此修改endpoint [https://na14.salesforce.com/services/data/v24.0/]为 [https://na14.salesforce.com/services/data/v33.0//tooling/]。
如下图所示设置Request URL及参数后Send请求。 apigee-runTestsAsynchronous

返回结果

可以看到,请求返回结果为一个Object的Id,实际上,它是一个AsyncApexJob对象的Id。
另外我们可以看到一个测试任务已经在“Apex 测试执行”中执行完毕。 Apex Test Execution 这时我们该如何获取详细的执行结果呢?
用Tooling API同样可以通过关联sObject查询到详细结果。
如下图的ER所示。 ER

1.ApexTestQueueItem [Document]

apigee-ApexTestQueueItem

返回结果

2.ApexTestResult [Document]

返回结果

3.ApexCodeCoverage [Document]

返回结果

2.runTestsSynchronous

如同字面一样, runTestsSynchronous将会以同步请求的方式执行测试代码并直接返回详细的测试结果。
如下图所示设置Request URL及参数后Send请求。 apigee-runTestsSynchronous

返回结果

以同步的方式执行测试后,测试任务并不会出现在“Apex 测试执行”中。 Apex Test Execution-runTestsSynchronous 这也正是为何用Sublime Text3 + MavensMate执行测试代码远快于通过Salesforce Developer Console执行的原因吧,我想。