5

我已经使用下面的代码从 SoapUI 运行,但我仍然得到一个缺少的属性异常:

类请求不存在此类属性

我该如何解决这个问题?

def project = com.eviware.soapui.model.support.ModelSupport.getModelItemProject( request ) 

// initialize OAuth consumer     
def consumer = new oauth.signpost.commonshttp.CommonsHttpOAuthConsumer( project.getPropertyValue( "oauth_consumer_key" ), project.getPropertyValue( "oauth_consumer_secret" ));    
consumer.setTokenWithSecret( project.getPropertyValue( "oauth_access_token" ), project.getPropertyValue( "oauth_access_token_secret" )); 

// sign the request     
consumer.sign( context.httpMethod ) 
4

2 回答 2

1

The code you have included here goes into the event tab in the PROJECT editor and you use a RequestFilter.filterRequest event to execute. You also have to create custom properties for consumer_key, consumer_secret, oauth_acces_token, and oauth_acccess_token_secret.
Here is the guide on how to implement this on the smartbear website http://www.soapui.org/REST-Testing/twitter-sample-project.html

于 2013-07-18T23:10:13.783 回答
1

编辑:查看了 API 指南,看来您有以下内容:

def project = com.eviware.soapui.model.support.ModelSupport.getModelItemProject( request ) 

然后你打电话project.getPropertyValue。根据API 指南,不需要这样getPropertyValue的方法com.eviware.soapui.model.support.ModelSupport

有一个名为com.eviware.soapui.model.project的接口。除非你从接口 com.eviware.soapui.model.TestPropertyHolder继承,否则你不会得到getPropertyValue.


为了帮助解决您的问题,您需要调试代码。根据第一行“请求”的结果,您很可能没有属性oauth_consumer_key,oauth_consumer_secret或。输出的内容(或者只是在 SoapUI 中设置一个断点并通过验证您是否拥有该属性)。oauth_access_tokenoauth_access_token_secretrequestdef project

否则,有几种替代方法可以解决您的问题。这些解决方案旨在将 OAuth 与 SoapUI 结合使用。

尝试以下操作

def gu = new com.eviware.soapui.support.GroovyUtils( context );

def xml = gu.getXmlHolder( 'Authenticate - Default#Response' );
def token = xml.getNodeValue( '/auth/token' );
log.info( 'Got token: ' + token );

def suite = context.testCase.testSuite;
suite.setPropertyValue( 'auth_token', token );
log.info( 'Saved auth_token to suite.' );

此代码的好处是“令牌永久保留在 TestSuite 属性中。这具有允许我在身份验证测试后运行测试的副作用/好处”。

如果这不起作用,这里有一篇很棒的文章解释了如何针对 Vimeo 进行 OAuth;这应该与 Twitter OAuth 非常相似。

这些解决方案都不需要 SoapUI Pro。

于 2013-06-17T01:07:33.097 回答