Как добавить форму в блокчейн, используя jmeter? - PullRequest
0 голосов
/ 08 июля 2019

Я разработал веб-приложение с использованием React поверх блокчейна Ethereum.

Одна из страниц моего приложения получает информацию от пользователя, например:

class AssetNew extends Component {
 state = {
  name: "",
  description: "",
  manufacturer: "",
  price: "",
  errorMessage: ""
 };

 onSubmit = async event => {
  event.preventDefault();

  const { name, description, manufacturer, price} = this.state;
  this.setState({errorMessage: "" });

  try {
    const accounts = await web3.eth.getAccounts();
    await tracker.methods
      .createAsset(name, description, manufacturer, price)
      .send({
       from: accounts[0],
       value: web3.utils.toWei(this.state.price, "ether"),
       gas: "1000000"
     });
 } catch (err) {
   this.setState({ errorMessage: err.message });
 }
};

render() {
return (
     <Form onSubmit={this.onSubmit} error={!!this.state.errorMessage}>
       <Form.Field>
         <label>Name</label>
         <Input
           value={this.state.name}
           onChange={event => this.setState({ name: event.target.value })}
        />
       </Form.Field>
       .... // three more from.field for description, manufacturer and price
 );
 }
}
export default AssetNew;

Эта страница получает имя, описание, производителя и цену и отправляет их в смарт-контракт для регистрации нового продукта. Все отлично работает с браузером (я могу создать новый продукт с помощью формы). Однако я не могу создать новый продукт с Jmeter. Я пытался отправить параметры методом POST:

enter image description here

После запуска теста Http-запросы успешны, но ничего не происходит (я ожидаю, что Jmeter создаст новый продукт).

Стоит ли ожидать, что Jmeter создаст новый продукт, передав параметры? Правильно ли я проверяю производительность?

Умный контракт для создания нового продукта:

contract AssetTracker {
  uint public id;
  uint nonce;
  struct Asset {
    string name;
    string description;
    string manufacture;
    uint price;
    uint id;
    address owner;
    bool initialized;
 }
 Asset[] public assets;

 function createAsset(string name, string description, string manufacture, uint price) public payable{

    id = uint(keccak256(now, msg.sender, nonce)) % 1000;
    nonce++;
    Asset memory newAsset = Asset(name, description, manufacture, price, id, msg.sender, true);
    assets.push(newAsset);
}

1 Ответ

1 голос
/ 08 июля 2019

Если вы можете отправить запрос с помощью браузера, вы можете использовать HTTP (S) тестовый регистратор сценариев JMeter для захвата соответствующего HTTP POST-запроса и сгенерировать HTTP-запрос сэмплер

  1. Подготовить JMeter к записи.Самый быстрый способ - использовать JMeter Templates функция

    • В главном меню JMeter выберите «Файл» - «Шаблоны - Запись» и нажмите «Создать»
    • Развернуть HTTP (S) Test Script Recorder и нажмите «Пуск»

      enter image description here

  2. Подготовьте браузер к записи.Настройте его для использования JMeter в качестве прокси

    • localhost или 127.0.0.1 в качестве хоста прокси
    • 8888 в качестве порта прокси
    • убедитесь, чтопрокси-сервер настроен на все протоколы и исключений нет
    • Если вы планируете записывать трафик HTTPS - импортируйте сертификат ApacheJMeterTemporaryRootCA.crt в ваш браузер, сертификат генерируется в папке "bin" вашей установки JMeter, когда выЗапустите средство записи сценариев тестирования HTTP (S)

    enter image description here

  3. Выполните запрос в браузере

  4. JMeter должен захватить запрос и сохранить сэмплер HTTP-запроса в группе потоков - Контроллер записи.

Дополнительная информация: Apache JMeter HTTP (S) Test Script Recorder

В качестве альтернативы вы можете использовать JMeter Chrome Extension для создания плана тестирования, в этом случае вам не придется беспокоиться о прокси и сертификатах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...