Contributions
Re: Example needed: How to use a ValueProvider plugin to provide a property value?
All, I just found out that most likely, in order to make the ValueProvider work with full property value expansion, I need to register a custom PropertyResolverFactory https://www.soapui.org/developers-corner/custom-factories/ in order to allow to pass the additional path context parameter to the credential store (Vault, Pleasant, ...). The custom PropertyResolver needs to take this path into account in addition to what today's DynamicPropertyResolver does... Many thanks Rao, for your help on the way to this finding - I think we can close this topic now. Best regards, awl674Views0likes0CommentsRe: Example needed: How to use a ValueProvider plugin to provide a property value?
Hi again, Rao, nmraowrote: Somewhere it still not hit my brain, the final use case. But your use case seems to be interesting. If I understand it better, probably can try something. These are some other uses found for DataProviders found in the source, Not sure if that is of any help to you. https://github.com/SmartBear/soapui/search?q=DynamicPropertyResolver and thanks for your continued help. The use case is to read SoapUI property values dynamically (during the test run) from a secret external store (in our case, e.g. Vault, or the Pleasant Password Server, or even a Keepass file). This will work fine if I can register a ValueProvider which does not provide a value for which no input parameters have been needed to calculate the result (like the random number, like the current test step or the project dir). For my use case, it is crucial that the ValueProvider implementation, in the parameter that is passed to the getValue method, i.e. in the PropertyExpansionContext also gets this additional information from the property usage, i.e. instead of just ${vaultSecret} I would configure ${vaultSecret#\\path\in\vault\to\database\password} and then my custom ValueProvider code should be able to take "\\path\in\vault\to\database\password" from the PropertyExpansionContext and use it to "calculate", i.e.look this value up in Vault, and return it as the property's value. Did I succeed in making myself clear enough now? 😉 I'll try to run SoapUI with the Java debugger attached, and then see what is available in the PropertyExpansionContext. Thanks & best regards awl695Views1like4CommentsRe: Example needed: How to use a ValueProvider plugin to provide a property value?
Hi again, nmraowrote: Would you like to use randomNumber in test request such as SOAP or REST? no - my goal for the plugin is even (much) more complex: I want to use a named ValueProvider but in addition, pass parameters to a concrete usage of this ValueProvider, such as Value Provider Name ("valueName") == "vaultSecret" and then use it like ${vaultSecret#some_path_within_a_Vault_instance_representing_a_secret_value} Do you happen to know whether it's possible to pass such a property parameter value ("some_path_within_a_Vault_instance_representing_a_secret_value") into the ValueProvider class, i.e. can I access it using the PropertyExpansionContext that is passed to my public String getValue(PropertyExpansionContext propertyExpansionContext) { (...) } method? Thanks a million one more time for your kind help! 👍 awl1.5KViews0likes6CommentsRe: Example needed: How to use a ValueProvider plugin to provide a property value?
Hello again nmrao, nmraowrote: awl How about context.randomNumber If you are testing in groovy script, the above should work. great news. This definitely works: log.info(context.randomNumber) log.info(context.randomNumber) log.info(context.randomNumber) log.info(context.randomNumber) log.info(context.randomNumber) and the output is: Thu Jul 15 11:49:07 CEST 2021:INFO:637.6823442157611 Thu Jul 15 11:49:07 CEST 2021:INFO:516.7372824953289 Thu Jul 15 11:49:07 CEST 2021:INFO:628.5712519826241 Thu Jul 15 11:49:07 CEST 2021:INFO:353.6060359250122 Thu Jul 15 11:49:07 CEST 2021:INFO:656.1003869084848 But this is not yet what I'd like to see: I'd like to assign the "randomNumber" value provided as the value of a "left-hand-side" property, e.g. at test case or test suite or even global level. Of course, I can always achieve this by writing custom Groovy code that does this assignment, such as testRunner.testCase.setPropertyValue("randomNumberProvided", context.randomNumber) but this would obviously require an additional test step in any test case that would like to use the value from the value provider. So I am assuming that there MUST be an easier way to do this by typical SoapUI expansible property notation? Many thanks one more time! Best regards Andreas1.5KViews0likes10CommentsRe: Example needed: How to use a ValueProvider plugin to provide a property value?
Hello Rao, nmraowrote: Have you followed any documentation? Please check below if not already https://www.soapui.org/docs/extension-plugins/developing-plugins/plugin-development/ Where did you copied the library that you created? yes, I was fully aware of the link that you provided. The code sample with the "randomNumber" ValueProvider can be found at many places, e.g. https://support.smartbear.com/readyapi/docs/configure/plugins/dev/annotations/misc/valueprovider.html (and yes, I am aware that generally this is about commercial ReadyAPI), or also in the Maven SoapUI plugin archetype project(s) on Github: https://github.com/olensmar/maven-soapui-plugin-archetype/blob/master/src/main/resources/java/ValueProvider.inc https://github.com/SmartBear/ready-api-plugins/blob/master/ready-api-plugin-archetype/src/main/resources/java/ValueProvider.inc The sad thing (and I really wonder that the person who wrote this piece of code and documentation has not provided this info) is that there is absolutely no information available at any of these places how to access the value that has now successfully been provided by the ValueProvider from any test case... I will just move forward and try the proposal from your next reply and report back shortly. Many thanks so far! 😀 Andreas1.5KViews1like0CommentsExample needed: How to use a ValueProvider plugin to provide a property value?
Hello SoapUI experts, can you please provide an example of how to access a custom @PluginValueProvider a.k.a. DynamicPropertyResolver.ValueProvider implementation class registered for a valueName (such as "randomNumber") from a property value? Given the standard example for https://www.soapui.org/apidocs/soapui/DefaultPackage/PluginValueProvider.html @PluginValueProvider(valueName = "randomNumber") public class MyValueProvider implements DynamicPropertyResolver.ValueProvider { @Override public String getValue(PropertyExpansionContext propertyExpansionContext) { return String.valueOf(1000 * Math.random()); } } How can I access the random value provided by the ValueProvider from a property defined in my TestCase? I tried several variants: ${randomNumber} ${#randomNumber#} ${#Global#randomNumber#} (...) (and many others) as property values for a property named "testProp" - but without success... So how can I make use of MyValueProvider and get hold of the random number returned by it from a TestCase? Thanks a million in advance for your kind help, awlSolved2KViews0likes14Comments