Example #1
0
    def create_instances(self,
                         instance_type,
                         image_id,
                         key_pair_path,
                         minCount=1,
                         maxCount=1,
                         subnet_id='subnet-02ce134a'):
        """docstring"""

        try:

            key_pair = Misc.remove_extensions(
                (Misc.get_filename_from_path(key_pair_path)))

            ec2 = self.resource

            instances = ec2.create_instances(ImageId=image_id,
                                             MinCount=minCount,
                                             MaxCount=maxCount,
                                             InstanceType=instance_type,
                                             SubnetId=subnet_id,
                                             KeyName=key_pair)

            instance = instances[0]
            print("Created instance:", instance.instance_id)
            instance.wait_until_running()
            instance.reload()
            print("Current Instance State:", instance.state)
            sleep(30)  # time for aws to register the instance_id

        except Exception as e:
            if hasattr(e, 'message'):
                print("Error occured: ", e.message)
            else:
                print("Error occured: ", e)
            traceback.print_exc(file=sys.stdout)

        return instances
Example #2
0
    def send_commands(self,
                      cmds,
                      test_plan,
                      test_data,
                      result_log_name='log.jtl',
                      log_name='jmeter.log',
                      default_username="******"):

        prefix = ''
        if result_log_name == 'log.jtl':
            prefix = Misc.remove_extensions(
                Misc.get_filename_from_path(
                    test_plan)) + '_' + Misc.time_now() + '_'

        with paramiko.SSHClient() as client:
            key = paramiko.RSAKey.from_private_key_file(self.key_path)
            client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

            try:
                client.connect(hostname=self.private_ip,
                               username=default_username,
                               pkey=key)
                self.execute_commands(client,
                                      ["echo 'Connected to EC2 instance'"
                                       ])  # connection acknowledgement

                self.execute_commands(
                    client, ["mkdir jmeter"])  # create separate directory
                ftp_client = client.open_sftp()
                print("Starting Jmeter config file upload:",
                      Misc.get_filename_from_path(test_plan))
                ftp_client.put(test_plan,
                               '/home/ec2-user/jmeter/' +
                               Misc.get_filename_from_path(test_plan),
                               callback=self.print_transfer_status)
                print("Jmeter config (.jmx) file uploaded.")
                if test_data:
                    print("Starting test data CSV file upload:",
                          Misc.get_filename_from_path(test_data))
                    ftp_client.put(test_data,
                                   '/home/ec2-user/jmeter/' +
                                   Misc.get_filename_from_path(test_data),
                                   callback=self.print_transfer_status)
                    print("Test Data (.csv) uploaded.")

                self.execute_commands(client, cmds)

                print('Starting Jmeter log (.log) file download')
                ftp_client.get('/home/ec2-user/' + log_name,
                               prefix + log_name,
                               callback=self.print_transfer_status)
                print("JMeter log (.log) file downloaded as :",
                      prefix + log_name)
                print("Starting Jmeter results file (.jtl) download.")
                ftp_client.get('/home/ec2-user/jmeter/' + result_log_name,
                               prefix + result_log_name,
                               callback=self.print_transfer_status)
                print("JMeter results (.jtl) file downloaded as :",
                      prefix + result_log_name)
                ftp_client.close()

            except Exception as e:
                if hasattr(e, 'message'):
                    print("Error occured: ", e.message)
                else:
                    print("Error occured: ", e)
                traceback.print_exc(file=sys.stdout)