1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.impl.wsdl.actions.loadtest;
14
15 import com.eviware.soapui.impl.wsdl.loadtest.WsdlLoadTest;
16 import com.eviware.soapui.impl.wsdl.support.HelpUrls;
17 import com.eviware.soapui.model.settings.Settings;
18 import com.eviware.soapui.settings.HttpSettings;
19 import com.eviware.soapui.support.UISupport;
20 import com.eviware.soapui.support.action.support.AbstractSoapUIAction;
21 import com.eviware.x.form.XFormDialog;
22 import com.eviware.x.form.XFormField;
23 import com.eviware.x.form.XFormFieldListener;
24 import com.eviware.x.form.support.ADialogBuilder;
25 import com.eviware.x.form.support.AField;
26 import com.eviware.x.form.support.AForm;
27 import com.eviware.x.form.support.AField.AFieldType;
28
29 /***
30 * Displays the LoadTest Options dialog
31 *
32 * @author Ole.Matzura
33 */
34
35 public class LoadTestOptionsAction extends AbstractSoapUIAction<WsdlLoadTest>
36 {
37 public static final String SOAPUI_ACTION_ID = "LoadTestOptionsAction";
38 private XFormDialog dialog;
39
40 public LoadTestOptionsAction()
41 {
42 super( "Options","Sets options for this LoadTest" );
43 }
44
45 public void perform( WsdlLoadTest loadTest, Object param )
46 {
47 if( dialog == null )
48 buildDialog();
49
50 dialog.setIntValue( Form.THREAD_STARTUP_DELAY, loadTest.getStartDelay() );
51 dialog.setBooleanValue( Form.RESET_STATISTICS, loadTest.getResetStatisticsOnThreadCountChange() );
52 dialog.setBooleanValue( Form.CALC_TPS, loadTest.getCalculateTPSOnTimePassed() );
53 dialog.setIntValue( Form.SAMPLE_INTERVAL, ( int ) loadTest.getSampleInterval() );
54 dialog.setBooleanValue( Form.DISABLE_HISTORY, loadTest.getHistoryLimit() == 0 );
55 dialog.setIntValue( Form.MAX_ASSERTIONS, ( int ) loadTest.getMaxAssertionErrors() );
56
57 Settings settings = loadTest.getSettings();
58
59 dialog.setBooleanValue( Form.INCLUDE_REQUEST, settings.getBoolean( HttpSettings.INCLUDE_REQUEST_IN_TIME_TAKEN ));
60 dialog.setBooleanValue( Form.INCLUDE_RESPONSE, settings.getBoolean( HttpSettings.INCLUDE_RESPONSE_IN_TIME_TAKEN ));
61 dialog.setBooleanValue( Form.CLOSE_CONNECTIONS, settings.getBoolean( HttpSettings.CLOSE_CONNECTIONS ));
62
63 if( dialog.show() )
64 {
65 try
66 {
67 loadTest.setStartDelay( dialog.getIntValue( Form.THREAD_STARTUP_DELAY, loadTest.getStartDelay() ));
68 loadTest.setResetStatisticsOnThreadCountChange( dialog.getBooleanValue( Form.RESET_STATISTICS ));
69 loadTest.setCalculateTPSOnTimePassed( dialog.getBooleanValue( Form.CALC_TPS ));
70 loadTest.setSampleInterval( dialog.getIntValue( Form.SAMPLE_INTERVAL, ( int ) loadTest.getSampleInterval() ));
71 loadTest.setHistoryLimit( dialog.getBooleanValue( Form.DISABLE_HISTORY ) ? 0 : -1 );
72 loadTest.setMaxAssertionErrors( dialog.getIntValue( Form.MAX_ASSERTIONS, 1000 ));
73
74
75 settings.setBoolean( HttpSettings.INCLUDE_REQUEST_IN_TIME_TAKEN,
76 dialog.getBooleanValue( Form.INCLUDE_REQUEST ));
77 settings.setBoolean( HttpSettings.INCLUDE_RESPONSE_IN_TIME_TAKEN,
78 dialog.getBooleanValue( Form.INCLUDE_RESPONSE ));
79 settings.setBoolean( HttpSettings.CLOSE_CONNECTIONS,
80 dialog.getBooleanValue( Form.CLOSE_CONNECTIONS ));
81 }
82 catch (NumberFormatException ex)
83 {
84 }
85 }
86 }
87
88 private void buildDialog()
89 {
90 dialog = ADialogBuilder.buildDialog( Form.class );
91 dialog.getFormField( Form.DISABLE_HISTORY ).addFormFieldListener( new XFormFieldListener() {
92
93 public void valueChanged( XFormField sourceField, String newValue, String oldValue )
94 {
95 dialog.getFormField( Form.SAMPLE_INTERVAL ).setEnabled( !Boolean.parseBoolean( newValue ) );
96 }} );
97 }
98
99 @AForm( name="LoadTest Options", description = "Set options for this LoadTest",
100 helpUrl=HelpUrls.LOADTESTOPTIONS_HELP_URL, icon=UISupport.OPTIONS_ICON_PATH )
101 private interface Form
102 {
103 @AField(name = "Thread startup delay", description = "The delay before starting a thread in ms", type = AFieldType.INT )
104 public final static String THREAD_STARTUP_DELAY = "Thread startup delay";
105
106 @AField(name = "Reset statistics", description = "when the number of threads changes", type = AFieldType.BOOLEAN )
107 public final static String RESET_STATISTICS = "Reset statistics";
108
109 @AField(name = "Calculate TPS/BPS", description = "based on actual time passed", type = AFieldType.BOOLEAN )
110 public final static String CALC_TPS = "Calculate TPS/BPS";
111
112 @AField(name = "Include request write", description = "in calculated time", type = AFieldType.BOOLEAN )
113 public final static String INCLUDE_REQUEST = "Include request write";
114
115 @AField(name = "Include response read", description = "in calculated time", type = AFieldType.BOOLEAN )
116 public final static String INCLUDE_RESPONSE = "Include response read";
117
118 @AField(name = "Close connections", description = "between each request", type = AFieldType.BOOLEAN )
119 public final static String CLOSE_CONNECTIONS = "Close connections";
120
121 @AField(name = "Sample interval", description = "in calculated time", type = AFieldType.INT )
122 public final static String SAMPLE_INTERVAL = "Sample interval";
123
124 @AField(name = "Disable History", description = "to preserve memory (will disable diagrams)", type = AFieldType.BOOLEAN )
125 public final static String DISABLE_HISTORY = "Disable History";
126
127 @AField(name = "Max Assertions in Log", description = "the maximum number of assertion errors to keep in log (to preserve memory)", type = AFieldType.INT )
128 public final static String MAX_ASSERTIONS = "Max Assertions in Log";
129 }
130 }